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中的代码编码格式转换问题
Jun 10 Python
python简单判断序列是否为空的方法
Jun 30 Python
python连接mysql实例分享
Oct 09 Python
python-docx修改已存在的Word文档的表格的字体格式方法
May 08 Python
python 从csv读数据到mysql的实例
Jun 21 Python
python3调用百度翻译API实现实时翻译
Aug 16 Python
Python递归函数 二分查找算法实现解析
Aug 12 Python
python线程安全及多进程多线程实现方法详解
Sep 27 Python
在Python中使用MySQL--PyMySQL的基本使用方法
Nov 19 Python
Python内置类型性能分析过程实例
Jan 29 Python
Django中的模型类设计及展示示例详解
May 29 Python
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
May 26 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学习笔记 php中面向对象三大特性之一[封装性]的应用
2011/06/13 PHP
php入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
2011/07/14 PHP
用JavaScript获取网页中的js、css、Flash等文件
2006/12/20 Javascript
Javascript的IE和Firefox兼容性汇编(zz)
2007/02/02 Javascript
用JS实现一个页面多个css样式实现
2008/05/29 Javascript
js中获取事件对象的方法小结
2011/03/13 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
2013/05/07 Javascript
jquery的trigger和triggerHandler的区别示例介绍
2014/04/20 Javascript
加随机数引入脚本不让浏览器读取缓存
2014/09/04 Javascript
JavaScript的jQuery库中function的存在和参数问题
2015/08/13 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
2016/09/19 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
2016/12/08 Javascript
JS实现京东首页之页面顶部、Logo和搜索框功能
2017/01/12 Javascript
nodejs使用express创建一个简单web应用
2017/03/31 NodeJs
React简单介绍
2017/05/24 Javascript
JavaScript使用Ajax上传文件的示例代码
2017/08/10 Javascript
vue setInterval 定时器失效的解决方式
2020/07/30 Javascript
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
2017/09/05 Python
Python使用struct处理二进制的实例详解
2017/09/11 Python
详解pyppeteer(python版puppeteer)基本使用
2019/06/12 Python
使用python打印十行杨辉三角过程详解
2019/07/10 Python
详解python 破解网站反爬虫的两种简单方法
2020/02/09 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
2020/02/12 Python
numba提升python运行速度的实例方法
2021/01/25 Python
python实现计算图形面积
2021/02/22 Python
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
高二化学教学反思
2014/01/30 职场文书
乡下人家教学反思
2014/02/01 职场文书
考试作弊检讨书
2014/10/21 职场文书
财务统计员岗位职责
2015/04/14 职场文书
2015年城市管理工作总结
2015/05/23 职场文书
2015年社区消防安全工作总结
2015/10/14 职场文书
大学组织委员竞选稿
2015/11/21 职场文书
OpenCV-Python实现轮廓拟合
2021/06/08 Python
Matplotlib绘制条形图的方法你知道吗
2022/03/21 Python