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的web框架中配置app的教程
Apr 30 Python
python实现读取并显示图片的两种方法
Jan 13 Python
python中列表和元组的区别
Dec 18 Python
pandas 转换成行列表进行读取与Nan处理的方法
Oct 30 Python
python爬虫超时的处理的实例
Dec 19 Python
Python使用修饰器进行异常日志记录操作示例
Mar 19 Python
Python数据类型之List列表实例详解
May 08 Python
python使用tomorrow实现多线程的例子
Jul 20 Python
python实现提取COCO,VOC数据集中特定的类
Mar 10 Python
Pycharm配置autopep8实现流程解析
Nov 28 Python
python3中布局背景颜色代码分析
Dec 01 Python
python tkinter实现定时关机
Apr 21 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 递归效率分析
2009/11/24 PHP
10个php函数实用却不常见
2015/10/13 PHP
window.open被浏览器拦截后的自定义提示效果代码
2007/11/19 Javascript
JavaScript监测ActiveX控件是否已经安装过的代码
2008/09/02 Javascript
js 格式化时间日期函数小结
2010/03/20 Javascript
JavaScript 设计模式之组合模式解析
2010/04/09 Javascript
用canvas 实现个图片三角化(LOW POLY)效果
2016/02/18 Javascript
Bootstrap 附加导航(Affix)插件实例详解
2016/06/01 Javascript
jQuery实现区域打印功能代码详解
2016/06/17 Javascript
jQuery简单实现tab选项卡切换效果
2016/06/20 Javascript
JS中substring与substr的用法
2016/11/16 Javascript
Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
2016/12/31 Javascript
微信小程序 自定义对话框实例详解
2017/01/20 Javascript
原生JS京东轮播图代码
2017/03/22 Javascript
Vue键盘事件用法总结
2017/04/18 Javascript
鼠标拖动改变DIV等网页元素的大小的实现方法
2017/07/06 Javascript
Vue代码整洁之去重方法整理
2019/08/06 Javascript
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
Python 高级专用类方法的实例详解
2017/09/11 Python
Python多层装饰器用法实例分析
2018/02/09 Python
python实现将多个文件分配到多个文件夹的方法
2019/01/07 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
2020/02/26 Python
Python MySQLdb 执行sql语句时的参数传递方式
2020/03/04 Python
Python切割图片成九宫格的示例代码
2020/03/10 Python
Html5原生拖拽相关事件简介以及基础实现
2020/11/19 HTML / CSS
Python如何定义一个函数
2015/09/01 面试题
商务英语本科生的自我评价分享
2013/11/15 职场文书
3分钟演讲稿
2014/04/30 职场文书
媒体宣传策划方案
2014/05/25 职场文书
贷款委托书怎么写
2014/08/02 职场文书
新课培训心得体会
2014/09/03 职场文书
销售会议开幕词
2015/01/28 职场文书
2015年管理人员工作总结
2015/05/13 职场文书
2015年秋季灭鼠工作总结
2015/07/27 职场文书
Python实现单例模式的5种方法
2021/06/15 Python
Python 数据可视化之Seaborn详解
2021/11/02 Python