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算法学习之计数排序实例
Dec 18 Python
Python实现压缩与解压gzip大文件的方法
Sep 18 Python
Python实战小程序利用matplotlib模块画图代码分享
Dec 09 Python
python traceback捕获并打印异常的方法
Aug 31 Python
python批量修改图片后缀的方法(png到jpg)
Oct 25 Python
解决每次打开pycharm直接进入项目的问题
Oct 28 Python
python+selenium实现QQ邮箱自动发送功能
Jan 23 Python
Numpy数组array和矩阵matrix转换方法
Aug 05 Python
使用Python来做一个屏幕录制工具的操作代码
Jan 18 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
Feb 26 Python
python接入支付宝的实例操作
Jul 20 Python
使用Python将语音转换为文本的方法
Aug 10 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
PHP 开发环境配置(测试开发环境)
2010/04/28 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
javascript实现焦点滚动图效果 具体方法
2013/06/24 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
简单的js表单验证函数
2013/10/28 Javascript
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
Javascript常用字符串判断函数代码分享
2014/12/08 Javascript
jQuery实现下拉框选择图片功能实例
2015/08/08 Javascript
封装属于自己的JS组件
2016/01/27 Javascript
JS中mouseover和mouseout多次触发问题如何解决
2016/06/06 Javascript
jQuery读取XML文件的方法示例
2017/02/03 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
js 数组详细操作方法及解析合集
2018/06/01 Javascript
vue中前进刷新、后退缓存用户浏览数据和浏览位置的实例讲解
2018/09/21 Javascript
Vue的路由及路由钩子函数的实现
2019/07/02 Javascript
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
在Python的Django框架中更新数据库数据的方法
2015/07/17 Python
Python实现自动添加脚本头信息的示例代码
2016/09/02 Python
python与php实现分割文件代码
2017/03/06 Python
在Python 字典中一键对应多个值的实例
2019/02/03 Python
Python facenet进行人脸识别测试过程解析
2019/08/16 Python
python标准库OS模块详解
2020/03/10 Python
用Python在Excel里画出蒙娜丽莎的方法示例
2020/04/28 Python
纯css3制作煽动翅膀的蝴蝶的示例
2018/04/23 HTML / CSS
新西兰航空中国官网:Air New Zealand China
2018/07/24 全球购物
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
职务聘任书范文
2014/03/29 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
甘南现象心得体会
2014/09/11 职场文书
公司租房协议书
2014/10/14 职场文书
市级三好学生评语
2014/12/29 职场文书
辞职信怎么写?你都知道吗?
2019/06/24 职场文书
Python实战之OpenCV实现猫脸检测
2021/06/26 Python
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL