1. 程式人生 > >Python填坑記——物件引用

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]