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

作者:openkai
鏈接:https://www.zhihu.com/question/32003140/answer/54293695
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

說得具體點可以把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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章