Python参数传递对象的引用原理解析


Posted in Python onMay 22, 2020

大家都知道在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 相关文章推荐
Python实现的多线程端口扫描工具分享
Jan 21 Python
使用Python中的greenlet包实现并发编程的入门教程
Apr 16 Python
python实现自动更换ip的方法
May 05 Python
python单元测试unittest实例详解
May 11 Python
python通过openpyxl生成Excel文件的方法
May 12 Python
python中requests和https使用简单示例
Jan 18 Python
python中实现数组和列表读取一列的方法
Apr 03 Python
Python快速查找list中相同部分的方法
Jun 27 Python
Python生命游戏实现原理及过程解析(附源代码)
Aug 01 Python
Python matplotlib以日期为x轴作图代码实例
Nov 22 Python
python cv2截取不规则区域图片实例
Dec 21 Python
谈谈python垃圾回收机制
Sep 27 Python
Python configparser模块常用方法解析
May 22 #Python
keras中的卷积层&池化层的用法
May 22 #Python
Keras Convolution1D与Convolution2D区别说明
May 22 #Python
Python pip安装模块提示错误解决方案
May 22 #Python
keras中的backend.clip用法
May 22 #Python
Pycharm修改python路径过程图解
May 22 #Python
TensorFlow keras卷积神经网络 添加L2正则化方式
May 22 #Python
You might like
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
Yii框架数据模型的验证规则rules()被执行的方法
2016/12/02 PHP
如何取得中文输入的真实长度?
2006/06/24 Javascript
JQuery 将元素显示在屏幕的中央的代码
2010/02/27 Javascript
[JSF]使用DataModel处理表行事件的实例代码
2013/08/05 Javascript
JavaScript让Textarea支持tab按键的方法
2015/06/26 Javascript
微信小程序 template模板详解及实例
2017/02/21 Javascript
Angularjs实现下拉框联动的示例代码
2017/08/22 Javascript
node通过npm写一个cli命令行工具
2017/10/12 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
2018/10/26 Javascript
js实现for循环跳过undefined值示例
2019/07/02 Javascript
微信小程序 腾讯地图显示偏差问题解决
2019/07/27 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
2020/04/26 Javascript
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
2020/11/09 Javascript
[03:04]DOTA2英雄基础教程 影魔
2013/12/11 DOTA
[00:48]完美“圣”典2016风云人物:xiao8宣传片
2016/11/30 DOTA
整理Python中的赋值运算符
2015/05/13 Python
python调用Matplotlib绘制分布点并且添加标签
2018/05/31 Python
使用python opencv对目录下图片进行去重的方法
2019/01/12 Python
Python中 CSV格式清洗与转换的实例代码
2019/08/29 Python
浅谈Tensorflow 动态双向RNN的输出问题
2020/01/20 Python
详解css3自定义滚动条样式写法
2017/12/25 HTML / CSS
css3 条纹化和透明化表格Firefox下测试成功
2014/04/15 HTML / CSS
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
2016/08/18 面试题
外企财务年会演讲稿
2014/01/03 职场文书
会议开场欢迎词
2014/01/15 职场文书
项目合作协议书范本
2014/04/16 职场文书
勤俭节约演讲稿
2014/05/08 职场文书
机械专业求职信
2014/05/25 职场文书
职业道德模范事迹材料
2014/08/24 职场文书
调解书格式范本
2015/05/20 职场文书
2016新年感言
2015/08/03 职场文书
幼儿园2016圣诞节活动总结
2016/03/31 职场文书