python对象传递_Python参数传递对象的引用原理解析
大家都知道在python中,一切皆对象,变量也不再具有类型,变量仅仅是对象的一个引用,我们通常用变量来测类型,通常测得就是被这个变量引用得对象的类型。
python采用的是传递对象的引用,为了方便说明,我们来看一个例子:
test = [1]
def change1(a):
a = [2]
def change2(a):
a.append(3)
change1(test)
change2(test)
print test
我们来看一下最后的输出:
[1,3]
是不是有人误以为是[2,3]?那你可得好好看接下来的内容。
传参传的是对象的引用!!!!!!
所以在change1(a)函数中,我们知道形参a与test引用了同一块内存空间,然后a在函数内部被修改了,它执行了另一块内存空间,也就是存放[2]的地方,但是只是a的指向改变了,test的指向还是存放[1]的内存空间。所以,接下来change2()对这块内存空间上放的值进行了修改,就得到了我们最后看到的结果。
为了加深理解,我觉得有必要再举一个类继承的例子:
class Parent(object):
x = 1
class Child1(Parent):
pass
class Child2(Parent):
pass
print Parent.x, Child1.x, Child2.x
Child1.x = 2
print Parent.x, Child1.x, Child2.x
Parent.x = 3
print Parent.x, Child1.x, Child2.x
输出结果为:
1 1 1
1 2 1
3 2 3
在继承中,所有子类中的x原本都是引用的父类中x对象的存储空间,但是child1中的x单独指向了另一块存储空间。这样以来,的到这个结果也就不意外了
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
本文标题: Python参数传递对象的引用原理解析
本文地址: http://www.cppcns.com/jiaoben/python/313959.html
python对象传递_Python参数传递对象的引用原理解析相关推荐
- python 参数收集_Python参数传递及收集机制原理解析
python参数传递时,主要有位置参数和关键字参数. 1. 位置参数:顾名思义,参数的位置顺序很重要,因为是直接根据位置赋值的. def func1(a, b): print(a,b) # 位置参数, ...
- python endswith函数_Python startswith()和endswith() 方法原理解析
startswith()方法 Python startswith() 方法用于检查字符串是否是以指定子字符串开头 如果是则返回 True,否则返回 False.如果参数 beg 和 end 指定值,则 ...
- python列表是可变对象吗_Python可变对象和不可变对象
Python中一切皆对象,每个对象都有其唯一的id,对应的类型和值,其中id指的是对象在内存中的位置.根据对象的值是否可修改分为可变对象和不可变对象.其中, 不可对象包括:数字,字符串,tuple 可 ...
- python时间变量_python的对象 变量
对象 所有的数据类型都是对象 字符串 数字:整数.数字 列表.字典 函数.类.模块.方法 print(type(20)) # 查看对象的数据类型 python整型: int 浮点型 :float 精 ...
- python 之属性_Python之对象的属性
# -*- coding: utf-8 -*- #python 27 #xiaodeng #Python之对象的属性 #http://python.jobbole.com/82622/ #对象的属性 ...
- python解析原理_Python语法垃圾回收机制原理解析
一 引入 解释器在执行到定义变量的语法时,会申请内存空间来存放变量的值,而内存的容量是有限的,这就涉及到变量值所占用内存空间的回收问题,当一个变量值没有用了(简称垃圾)就应该将其占用的内存给回收掉,那 ...
- python timer详解_python线程定时器Timer实现原理解析
这篇文章主要介绍了python线程定时器Timer实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.线程定时器Timer原理 原理比较 ...
- python 定时器实现原理_python线程定时器Timer实现原理解析
这篇文章主要介绍了python线程定时器Timer实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.线程定时器Timer原理 原理比较 ...
- python如何进行格式化输出变量_Python变量格式化输出实现原理解析
print() 函数使用以 % 开头的转换说明符对各种类型的数据进行格式化输出. 转换说明符(Conversion Specifier)只是一个占位符(也称为格式化操作符),它会被后面表达式(变量.常 ...
最新文章
- 基于PaddlePaddle的机器翻译教程 | 深度学习基础任务系列
- Android-NDK-hello-jniCallback
- let const —— ES6基础总结(二)
- SAP UI5 bindProperty
- 分享自TERRY-V 《Qt Creator生成带图标的exe文件》
- 每天30分钟搞Software Rendering--(0)搜集资料,阅读,了解
- C程序设计 4顺序程序设计
- RS信道编码(matlab)
- 最新数据:中国一二三四五线城市排名出炉!
- 【iTools】iTools Index
- 3、核对单《数据收集工具与技术》
- root用户无法启动vscode的解决方法
- RoundProgressBar(圆形进度条)
- 基于php+mysql的校园木本植物检索查询统
- 拷贝原站点有用文章(合并页)
- ebuy遇到的问题以及解决方法
- 【研发管理】三手项目 接盘时 必须要做的四件事
- 优化游戏以便在 Facebook.com 上运行
- frog——2017科技趋势预测
- CKA认证含金量高吗?
热门文章
- UI设计干货素材|动效导航,漂亮的悬停动效
- 护理在计算机的应用研究,计算机虚拟和模拟技术在护理实践教学中应用的研究...
- a人工智能b大数据c云计算_你清楚5G物联网、大数据、云计算、人工智能之间的关联吗?...
- c语言传入的指针无返回值,c语言 关于指针注意事项
- weight_decay一般设置为多少_50岁的夫妻一般有多少存款?他们在为养老做准备吗?...
- qwt+qt5.4.1+win7 环境搭建(完美版)
- 计算机网络:VLAN和VXLAN
- 如何给UNIX域Socket套接字抓包?
- 用管道pipe实现程序与shell/bash脚本之间的通路
- Docker基础知识:Containers,Namespace,CGroups