码迷,mamicode.com
首页 > 编程语言 > 详细

python参数传递:对象的引用

时间:2018-09-22 23:24:20      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:pre   soft   类继承   ros   结果   子类   print   font   空间   

  大家都知道在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参数传递:对象的引用

标签:pre   soft   类继承   ros   结果   子类   print   font   空间   

原文地址:https://www.cnblogs.com/insane-Mr-Li/p/9691449.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!