Python参数传递对象的引用原理解析
大家都知道在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.xChild1.x = 2 print Parent.x, Child1.x, Child2.xParent.x = 3 print Parent.x, Child1.x, Child2.x输出结果为:1 1 11 2 13 2 3
在继承中,所有子类中的x原本都是引用的父类中x对象的存储空间,但是child1中的x单独指向了另一块存储空间。这样以来,的到这个结果也就不意外了
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持好吧啦网。
相关文章:
1. Docker究竟是什么 为什么这么流行 它的优点和缺陷有哪些?2. Kotlin + Flow 实现Android 应用初始化任务启动库3. 如何用python识别滑块验证码中的缺口4. ASP.NET MVC视图页使用jQuery传递异步数据的几种方式详解5. SpringBoot+SpringCache实现两级缓存(Redis+Caffeine)6. AJAX实现省市县三级联动效果7. Java基于redis和mysql实现简单的秒杀(附demo)8. 三道java新手入门面试题,通往自由的道路--锁+Volatile9. php读取xml中某个元素的内容(PHP5以上才支持)10. 关于HTML5的img标签
