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 网络编程起步(Socket发送消息)
Sep 06 Python
Python实现树莓派WiFi断线自动重连的实例代码
Mar 16 Python
python训练数据时打乱训练数据与标签的两种方法小结
Nov 08 Python
BP神经网络原理及Python实现代码
Dec 18 Python
在python带权重的列表中随机取值的方法
Jan 23 Python
pyQt5实时刷新界面的示例
Jun 25 Python
python科学计算之scipy——optimize用法
Nov 25 Python
Pandas时间序列:重采样及频率转换方式
Dec 26 Python
python文件排序的方法总结
Sep 13 Python
pandas 数据类型转换的实现
Dec 29 Python
Python约瑟夫生者死者小游戏实例讲解
Jan 04 Python
Python中re模块的元字符使用小结
Apr 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
这东西价格,可以买几台TECSUN S-2000
2021/03/02 无线电
PHP循环获取GET和POST值的代码
2008/04/09 PHP
国外比较好的几个的Php开源建站平台小结
2010/04/22 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
PHP中Session可能会引起并发问题
2015/06/26 PHP
PHP实现上传文件并存进数据库的方法
2015/07/16 PHP
php将数组存储为文本文件方法汇总
2015/10/28 PHP
yii框架搜索分页modle写法
2016/12/19 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
2016/12/28 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
Laravel 5.5 实现禁用用户注册示例
2019/10/24 PHP
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
jQuery学习笔记之创建DOM元素
2015/01/19 Javascript
js创建数组的简单方法
2016/07/27 Javascript
BootStrap表单验证实例代码
2017/01/13 Javascript
ES6新特性之变量和字符串用法示例
2017/04/01 Javascript
vue的事件绑定与方法详解
2017/08/16 Javascript
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
vue 注册组件的使用详解
2018/05/05 Javascript
JS实现checkbox互斥(单选)功能示例
2019/05/04 Javascript
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
2018/10/21 Python
Python设计模式之模板方法模式实例详解
2019/01/17 Python
python psutil模块使用方法解析
2019/08/01 Python
DVF官方网站:美国时装界尊尚品牌
2017/08/29 全球购物
世界上最大的家庭自动化公司:Smarthome
2017/12/20 全球购物
Monki官网:斯堪的纳维亚的独立时尚品牌
2020/11/09 全球购物
音乐学院硕士生的自我评价分享
2013/11/01 职场文书
电气专业推荐信范文
2013/11/18 职场文书
专科毕业生自我鉴定
2013/12/01 职场文书
四年级下册教学反思
2014/02/01 职场文书
大型营销活动计划书
2014/04/28 职场文书
公务员考察材料范文
2014/12/23 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers
深入探讨opencv图像矫正算法实战
2021/05/21 Python