Python填坑记——对象引用

首先,我们来了解一下python的基础概念:
1. Python在heap中分配的对象分成两类:可变对象和不可变对象。所谓可变对象是指,对象的内容是可变的,例如list。而不可变的对象则相反,表示其内容不可变。
不可变对象:int,string,float,tuple

可变对象   :list,dictionary

2. Python函数的参数传递采用的是“传对象引用”的方式。


下面我们用例子来理解一下以上概念:

x=1
y=x    #y跟x指向同一个对象引用
x=2    #由于x是不可变对象,这时候旧的对象被系统回收,x指向新的对象引用
print x,y #结果是2,1

a = ['1'] #a指向了一个list可变对象引用
b = a     #b跟a指向同一个对象引用
a[0] = 2 #改变a对象引用的值,那么跟a指向同一个对象引用的b的值也随之同步改变。
print a,b #结果是2,2

def func(a):
  a[0]=1 #改变a对象引用的值,那么跟a指向同一个对象引用的b的值也随之同步改变。

b=['2']
func(b) #上面提到,函数的参数传递就是传对象引用,所以这里就相当于b=a,即b跟a指向同一个对象引用
print b  #结果[1]

注意下面这个例子跟上面例子的区别。

def func(a):
  a=['1'] #这里并没有修改a指向的对象引用的值,而是a指向了新的对象引用,所以最后b的值没有改变。

b=['2']
func(b)
print b  #结果[2]




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值