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中元组,列表,字典的区别
May 21 Python
Python网络爬虫与信息提取(实例讲解)
Aug 29 Python
Python判断两个对象相等的原理
Dec 12 Python
python爬虫获取多页天涯帖子
Feb 23 Python
儿童python练习实例
May 27 Python
Python对象中__del__方法起作用的条件详解
Nov 01 Python
我喜欢你 抖音表白程序python版
Apr 07 Python
详解Python利用random生成一个列表内的随机数
Aug 21 Python
python字符串替换re.sub()实例解析
Feb 09 Python
Python带参数的装饰器运行原理解析
Jun 09 Python
python基于exchange函数发送邮件过程详解
Nov 06 Python
详解Python内置模块Collections
Mar 22 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
ExtJS与PHP、MySQL实现存储的方法
2010/04/02 PHP
帝国CMS留言板回复后发送EMAIL通知客户
2015/07/06 PHP
记录一次排查PHP脚本执行卡住的问题
2016/12/27 PHP
解决json日期格式问题的3种方法
2014/02/02 Javascript
jQuery的缓存机制浅析
2014/06/07 Javascript
js文本框输入内容智能提示效果
2015/12/02 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
JavaScript仿微博发布信息案例
2016/11/16 Javascript
jquery点击展示与隐藏更多内容
2016/12/03 Javascript
深入理解javascript中的 “this”
2017/01/17 Javascript
vue.js实现刷新当前页面的方法教程
2017/07/05 Javascript
(模仿京东用户注册)用JQuery实现简单表单验证,初学者必看
2018/01/08 jQuery
Vue 2.0 侦听器 watch属性代码详解
2019/06/19 Javascript
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
简明 Python 基础学习教程
2007/02/08 Python
Python读取mp3中ID3信息的方法
2015/03/05 Python
Python使用正则表达式抓取网页图片的方法示例
2017/04/21 Python
python 3.6.2 安装配置方法图文教程
2018/09/18 Python
Django网络框架之HelloDjango项目创建教程
2019/06/06 Python
pytorch 实现cross entropy损失函数计算方式
2020/01/02 Python
opencv python在视屏上截图功能的实现
2020/03/05 Python
在脚本中单独使用django的ORM模型详解
2020/04/01 Python
Python用SSH连接到网络设备
2021/02/18 Python
灵活运用CSS3特性绘制简易版围棋效果
2016/09/28 HTML / CSS
西班牙在线光学:Visual-Click
2020/06/22 全球购物
几个Linux面试题笔试题
2016/08/01 面试题
应届大学生求职的自我评价
2013/11/17 职场文书
办理护照介绍信
2014/01/16 职场文书
小学二年级评语
2014/04/21 职场文书
竞选学习委员演讲稿
2014/04/28 职场文书
北京故宫导游词
2015/01/31 职场文书
青岛海底世界导游词
2015/02/11 职场文书
初中毕业感言300字
2015/07/31 职场文书
成功的商业计划书这样写才最靠谱
2019/07/12 职场文书
oracle覆盖导入dmp文件的2种方法
2021/05/21 Oracle
Nginx的gzip相关介绍
2022/05/11 Servers