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写一个贪吃蛇游戏实例代码
Aug 21 Python
python enumerate函数的使用方法总结
Nov 15 Python
Python程序员面试题 你必须提前准备!
Jan 16 Python
python3对拉勾数据进行可视化分析的方法详解
Apr 03 Python
pyQT5 实现窗体之间传值的示例
Jun 20 Python
python 实现GUI(图形用户界面)编程详解
Jul 17 Python
Python Django 页面上展示固定的页码数实现代码
Aug 21 Python
简单的Python调度器Schedule详解
Aug 30 Python
python图形开发GUI库pyqt5的基本使用方法详解
Feb 14 Python
Selenium常见异常解析及解决方案示范
Apr 10 Python
Python通过两个dataframe用for循环求笛卡尔积
Apr 29 Python
python开发飞机大战游戏
Jul 15 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连接MongoDB示例代码
2012/09/06 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
Yii框架布局文件的动态切换操作示例
2019/11/11 PHP
JS保留两位小数,多位小数的示例代码
2014/01/07 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
url传递的参数值中包含&时,url自动截断问题的解决方法
2016/08/02 Javascript
利用types增强vscode中js代码提示功能详解
2017/07/07 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
Bootstrap一款超好用的前端框架
2017/09/25 Javascript
Angularjs过滤器实现动态搜索与排序功能示例
2017/12/13 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
vue实现自定义H5视频播放器的方法步骤
2019/07/01 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
微信小程序实现简单的select下拉框
2020/11/23 Javascript
[36:22]VP vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python程序设计入门(2)变量类型简介
2014/06/16 Python
python中黄金分割法实现方法
2015/05/06 Python
python实现一次创建多级目录的方法
2015/05/15 Python
在Python的struct模块中进行数据格式转换的方法
2015/06/17 Python
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
python中zip()方法应用实例分析
2016/04/16 Python
Python实现PS滤镜的旋转模糊功能示例
2018/01/20 Python
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
Python应用领域和就业形势分析总结
2019/05/14 Python
python字符串中匹配数字的正则表达式
2019/07/03 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
2020/07/01 Python
Keds官方网站:购买帆布运动鞋和经典皮鞋
2016/11/12 全球购物
印度尼西亚值得信赖的第一家网店:Bhinneka
2018/07/16 全球购物
印度尼西亚最好的小工具在线商店:Erafone.com
2019/03/26 全球购物
竟聘演讲稿范文
2013/12/31 职场文书
高校教师思想汇报
2014/01/11 职场文书
2014公安机关纪律作风整顿思想汇报
2014/09/13 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
毛主席纪念堂观后感
2015/06/17 职场文书
Python如何识别银行卡卡号?
2021/06/10 Python
MySQL中dd::columns表结构转table过程及应用详解
2022/09/23 MySQL