首先,我们来了解一下python的基础概念:
1. Python在heap中分配的对象分成两类:可变对象和不可变对象。所谓可变对象是指,对象的内容是可变的,例如list。而不可变的对象则相反,表示其内容不可变。
不可变对象:int,string,float,tuple
注意下面这个例子跟上面例子的区别。
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]