鏈接:https://www.zhihu.com/question/32003140/answer/54293695
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
比如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