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开发框架Django
Jun 30 Python
python实现挑选出来100以内的质数
Mar 24 Python
在Python中使用sort()方法进行排序的简单教程
May 21 Python
VScode编写第一个Python程序HelloWorld步骤
Apr 06 Python
Python中最大递归深度值的探讨
Mar 05 Python
Python实现的文轩网爬虫完整示例
May 16 Python
python操作excel让工作自动化
Aug 09 Python
Python K最近邻从原理到实现的方法
Aug 15 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
Mar 06 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
May 25 Python
浅谈对python中if、elif、else的误解
Aug 20 Python
Pytorch实验常用代码段汇总
Nov 19 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
ajax取消挂起请求的处理方法
2013/03/18 PHP
一波PHP中cURL库的常见用法代码示例
2016/05/06 PHP
Zend Framework入门应用实例详解
2016/12/11 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
PHP优化之批量操作MySQL实例分析
2020/04/23 PHP
最近项目写了一些js,水平有待提高
2009/01/31 Javascript
Javascript中实现trim()函数的两种方法
2015/02/04 Javascript
js点击选择文本的方法
2015/02/09 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
2015/08/31 Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
2016/04/29 Javascript
javascript设计模式之单体模式学习笔记
2017/02/15 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
解决vue 路由变化页面数据不刷新的问题
2018/03/13 Javascript
详解PHP后期静态绑定分析与应用
2018/03/21 Javascript
35个最好用的Vue开源库(史上最全)
2019/01/03 Javascript
Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制
2019/09/05 Javascript
Postman如何实现参数化执行及断言处理
2020/07/28 Javascript
vue-router 按需加载 component: () => import() 报错的解决
2020/09/22 Javascript
详解python之多进程和进程池(Processing库)
2017/06/09 Python
Python企业编码生成系统之系统主要函数设计详解
2019/07/26 Python
Django如何将URL映射到视图
2019/07/29 Python
python cv2截取不规则区域图片实例
2019/12/21 Python
Python 合并拼接字符串的方法
2020/07/28 Python
HTML5混合开发二维码扫描以及调用本地摄像头
2017/12/27 HTML / CSS
印度婴儿用品在线商店:Firstcry.com
2016/12/05 全球购物
工商企业管理专业自荐信范文
2014/04/12 职场文书
药剂专业自荐信范文
2014/04/16 职场文书
跑操口号
2014/06/12 职场文书
单位委托书格式范本
2014/09/29 职场文书
汽车机电维修工求职信
2014/09/30 职场文书
商场广播稿范文
2015/08/19 职场文书
给学校的建议书400字
2015/09/14 职场文书
大学学生会竞选稿
2015/11/19 职场文书
pandas中对文本类型数据的处理小结
2021/11/01 Python
MySQL数据库查询进阶之多表查询详解
2022/04/08 MySQL