首先,我们来了解一下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]