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 相关文章推荐
PyCharm在win10的64位系统安装实例
Nov 26 Python
PyQt5每天必学之切换按钮
Aug 20 Python
python学生信息管理系统(完整版)
Apr 05 Python
Python检查ping终端的方法
Jan 26 Python
Django之使用内置函数和celery发邮件的方法示例
Sep 16 Python
python实现代码统计程序
Sep 19 Python
使用python的turtle绘画滑稽脸实例
Nov 21 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
Mar 06 Python
python爬虫开发之selenium模块详细使用方法与实例全解
Mar 09 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
Apr 25 Python
在CentOS7下安装Python3教程解析
Jul 09 Python
Python如何实现感知器的逻辑电路
Dec 25 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中Smarty模板初体验
2011/08/08 PHP
php中DOMElement操作xml文档实例演示
2013/03/26 PHP
详解PHP导入导出CSV文件
2014/11/03 PHP
PHP输出日历表代码实例
2015/03/27 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
深入浅析PHP的session反序列化漏洞问题
2017/06/15 PHP
PHP命名空间简单用法示例
2018/12/28 PHP
关于laravel 子查询 & join的使用
2019/10/16 PHP
js文字滚动停顿效果代码
2008/06/28 Javascript
javaScript 简单验证代码(用户名,密码,邮箱)
2009/09/28 Javascript
jQuery实现的一个自定义Placeholder属性插件
2014/08/11 Javascript
javascript中Array数组的迭代方法实例分析
2015/02/04 Javascript
jQuery实现控制文字内容溢出用省略号(…)表示的方法
2016/02/26 Javascript
基于JQuery实现分隔条的功能
2016/06/17 Javascript
jQuery实现的导航下拉菜单效果示例
2016/09/05 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
详解Vue.directive 自定义指令
2019/03/27 Javascript
localstorage实现带过期时间的缓存功能
2019/06/28 Javascript
vue 框架下自定义滚动条(easyscroll)实现方法
2019/08/29 Javascript
vuex入门最详细整理
2020/03/04 Javascript
[27:08]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第二场 11.21
2020/11/23 DOTA
[10:21]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster 选手采访
2021/03/11 DOTA
python连接MySQL数据库实例分析
2015/05/12 Python
Python装饰器原理与简单用法实例分析
2018/04/29 Python
TensorFlow利用saver保存和提取参数的实例
2018/07/26 Python
python+opencv像素的加减和加权操作的实现
2019/07/14 Python
python新手学习使用库
2020/06/11 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
2020/12/24 Python
HTML5画渐变背景图片并自动下载实现步骤
2013/11/18 HTML / CSS
Html5实现二维码扫描并解析
2016/01/20 HTML / CSS
介绍一下游标
2012/01/10 面试题
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
“三支一扶”支教教师思想汇报
2014/09/13 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
2015暑期社会实践调查报告
2015/07/14 职场文书
《坐井观天》教学反思
2016/02/18 职场文书