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编码时应该注意的几个情况
Mar 04 Python
python实现对excel进行数据剔除操作实例
Dec 07 Python
详谈在flask中使用jsonify和json.dumps的区别
Mar 26 Python
python实现在pandas.DataFrame添加一行
Apr 04 Python
Linux下多个Python版本安装教程
Aug 15 Python
python+opencv实现霍夫变换检测直线
Oct 23 Python
对Python3之方法的覆盖与super函数详解
Jun 26 Python
简单了解Python3里的一些新特性
Jul 13 Python
详解python破解zip文件密码的方法
Jan 13 Python
基于FME使用Python过程图解
May 13 Python
详解Pandas 处理缺失值指令大全
Jul 30 Python
Python Unittest原理及基本使用方法
Nov 06 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
2021年最新CPU天梯图
2021/03/04 数码科技
PHP通过header实现文本文件下载的代码
2010/08/08 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
2013/06/20 PHP
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
php array_merge_recursive 数组合并
2016/10/26 PHP
如何在Laravel之外使用illuminate组件详解
2020/09/20 PHP
符合标准的js表单提交的代码
2007/09/13 Javascript
基于jquery的可多选的下拉列表框
2012/07/20 Javascript
每天一篇javascript学习小结(属性定义方法)
2015/11/19 Javascript
AngularJs expression详解及简单示例
2016/09/01 Javascript
angular基于路由控制ui-router实现系统权限控制
2016/09/27 Javascript
微信小程序技巧之show内容展示,上传文件编码问题
2017/01/23 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
2018/11/01 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
深入解析koa之异步回调处理
2019/06/17 Javascript
js中关于Blob对象的介绍与使用
2019/11/29 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
[48:52]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第一局
2016/02/25 DOTA
python框架django基础指南
2016/09/08 Python
使用pip发布Python程序的方法步骤
2018/10/11 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
Python argparse模块应用实例解析
2019/11/15 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
关于Python字符编码与二进制不得不说的一些事
2020/10/04 Python
python中用Scrapy实现定时爬虫的实例讲解
2021/01/18 Python
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
英国领先的餐饮折扣俱乐部:Gourmet Society
2020/07/26 全球购物
前台文员我鉴定
2014/01/12 职场文书
酒店保安领班职务说明书
2014/03/04 职场文书
市场总经理岗位职责
2014/04/11 职场文书
租赁协议书范本
2014/04/22 职场文书
2015年八一建军节活动总结
2015/03/20 职场文书
实习单位意见
2015/06/04 职场文书
党小组意见范文
2015/06/08 职场文书
2016年班主任培训心得体会
2016/01/07 职场文书
JS精髓原型链继承及构造函数继承问题纠正
2022/06/16 Javascript