python参数传递:对象的引用

python参数传递:对象的引用

        大家都知道在python中,一切皆对象,变量也不再具有类型,变量仅仅是对象的一个引用,我们通常用变量来测类型,通常测得就是被这个变量引用得对象的类型。
例如:
这里写图片描述
这里的类型就是123这个对象的类型。变量的作用就相当于c中的指针,指向特定的内存空间,有了这个基础,我们就可以来聊一聊python中的参数传递了。
接触过c或c++的朋友都知道,一般我们常说的传参方式有两种:传引用、传值
但是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单独指向了另一块存储空间。这样以来,的到这个结果也就不意外了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值