1. 程式人生 > >python中將類傳給函式,在函式中修改類的值的問題

python中將類傳給函式,在函式中修改類的值的問題

說得具體點可以把python的變數理解成一個名字指向實際的值,在傳到函式裡的時候, 是告訴函式的變數名字也指向我的這個值,但是並不是我自己傳到函式內
比如foo = [1,2,3] 可以理解成為foo指向[1,2,3],foo和[1,2,3]並不是在一起
現在有個函式
def alter(bar):
    bar.append(4)
    bar = [0,1]

如果我們把foo傳給alter這個函式,
alter(foo)
就會有foo和bar分別指向[1,2,3]
執行bar.append(4)
因為bar指向[1,2,3], [1,2,3]現在變成[1,2,3,4]
因為foo也指向[1,2,3],現在被bar改成了[1,2,3,4],foo也是[1,2,3,4]
執行bar = [0,1]
bar指向一個新的[0,1],但是foo還是指向[1,2,3,4]
執行完alter函式foo是[1,2,3,4]
所以理論上不是傳引用,如果穿引用foo在執行完alter函式後應該是[0,1]

下面是完整測試程式碼
def alter(bar): 
    bar.append(4)
    bar = [0,1]


foo = [1,2,3]
print 'foo', foo
alter(foo)
print 'foo', foo