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 相关文章推荐
Python3.0与2.X版本的区别实例分析
Aug 25 Python
使用Python保存网页上的图片或者保存页面为截图
Mar 05 Python
完美解决python遍历删除字典里值为空的元素报错问题
Sep 11 Python
Python实现的双色球生成功能示例
Dec 18 Python
Python实现矩阵相乘的三种方法小结
Jul 26 Python
Django 实现Admin自动填充当前用户的示例代码
Nov 18 Python
Pytoch之torchvision.transforms图像变换实例
Dec 30 Python
Django models文件模型变更错误解决
May 11 Python
python爬取抖音视频的实例分析
Jan 19 Python
python 实现定时任务的四种方式
Apr 01 Python
Python 中random 库的详细使用
Jun 03 Python
7个关于Python的经典基础案例
Nov 07 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
探讨方法的重写(覆载)详解
2013/06/08 PHP
解析php5配置使用pdo
2013/07/03 PHP
php生成mysql的数据字典
2016/07/07 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
PHP递归获取目录内所有文件的实现方法
2016/11/01 PHP
JavaScript 语法集锦 脚本之家基础推荐
2009/11/15 Javascript
JS 判断undefined的实现代码
2009/11/26 Javascript
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
谈谈关于JavaScript 中的 MVC 模式
2013/04/11 Javascript
javascript实现简单的html5视频播放器
2015/05/06 Javascript
jquery实现顶部向右伸缩的导航区域代码
2015/09/02 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
javascript瀑布流布局实现方法详解
2016/02/17 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
canvas滤镜效果实现代码
2017/02/06 Javascript
简单实现AngularJS轮播图效果
2020/04/10 Javascript
JavaScript队列的应用实例详解【经典数据结构】
2017/04/12 Javascript
AngularJS中的路由使用及实现代码
2017/10/09 Javascript
原生JS实现ajax与ajax的跨域请求实例
2017/12/01 Javascript
在js代码拼接dom对象到页面上的模板总结
2018/10/21 Javascript
浅析JavaScript 函数防抖和节流
2020/07/13 Javascript
[03:57]《不朽》——2015DOTA2国际邀请赛—中国军团出征主题曲MV
2015/07/15 DOTA
浅谈Python2.6和Python3.0中八进制数字表示的区别
2017/04/28 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
python+selenium实现自动抢票功能实例代码
2018/11/23 Python
PyQt5下拉式复选框QComboCheckBox的实例
2019/06/25 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
HTML5中indexedDB 数据库的使用实例
2017/05/11 HTML / CSS
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
求职简历自荐信范文
2013/10/21 职场文书
建筑安全责任书范本
2014/07/24 职场文书
甜品店创业计划书
2014/09/21 职场文书
读后感作文评语
2014/12/25 职场文书
大学生敬老院活动总结
2015/05/07 职场文书
机关干部作风整顿心得体会
2016/01/22 职场文书
Python激活Anaconda环境变量的详细步骤
2021/06/08 Python