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 27 Python
Python中使用hashlib模块处理算法的教程
Apr 28 Python
python+matplotlib绘制饼图散点图实例代码
Jan 20 Python
Python饼状图的绘制实例
Jan 15 Python
Python3实现从排序数组中删除重复项算法分析
Apr 03 Python
通过字符串导入 Python 模块的方法详解
Oct 27 Python
Python pandas库中的isnull()详解
Dec 26 Python
Python3运算符常见用法分析
Feb 14 Python
matplotlib 对坐标的控制,加图例注释的操作
Apr 17 Python
基于PyTorch的permute和reshape/view的区别介绍
Jun 18 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
Jul 03 Python
Django框架实现在线考试系统的示例代码
Nov 30 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
模拟xcopy的函数
2006/10/09 PHP
PHP操作文件方法问答
2007/03/16 PHP
CodeIgniter框架URL路由总结
2014/09/03 PHP
PHP session文件独占锁引起阻塞问题解决方法
2015/05/12 PHP
php实现表单多按钮提交action的处理方法
2015/10/24 PHP
WordPress开发中用于标题显示的相关函数使用解析
2016/01/07 PHP
php如何把表单内容提交到数据库
2019/07/08 PHP
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
javascript获取当前ip的代码
2009/05/10 Javascript
jQuery插件开发的两种方法及$.fn.extend的详解
2014/01/16 Javascript
js模拟淘宝网的多级选择菜单实现方法
2015/08/18 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
javascript之Boolean类型对象
2016/06/07 Javascript
Vue.JS入门教程之处理表单
2016/12/01 Javascript
微信小程序动态添加分享数据
2017/06/14 Javascript
解决使用vue.js路由后失效的问题
2018/03/17 Javascript
vue + node如何通过一个Txt文件批量生成MP3并压缩成Zip
2020/06/02 Javascript
[01:06:42]VP vs NewBee Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
[01:16:12]完美世界DOTA2联赛PWL S2 FTD vs Inki 第一场 11.21
2020/11/23 DOTA
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
pymssql数据库操作MSSQL2005实例分析
2015/05/25 Python
python利用拉链法实现字典方法示例
2017/03/25 Python
详解Tensorflow数据读取有三种方式(next_batch)
2018/02/01 Python
django 按时间范围查询数据库实例代码
2018/02/11 Python
django连接oracle时setting 配置方法
2019/08/29 Python
Python for循环与getitem的关系详解
2020/01/02 Python
python日期与时间戳的各种转换示例
2020/02/12 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
如何基于python把文字图片写入word文档
2020/07/31 Python
英国剑桥包中文官网:The Cambridge Satchel Company中国
2018/11/06 全球购物
大专自我鉴定范文
2013/10/23 职场文书
小小的船教学反思
2014/02/21 职场文书
增员口号大全
2014/06/18 职场文书
经费申请报告范文
2015/05/18 职场文书
请假条应该怎么写?
2019/06/24 职场文书
2019年英语版感谢信(8篇)
2019/09/29 职场文书