我本來期望下面的代碼:爲什麼更改對象類型會影響Python在傳遞引用時的行爲?
def a(l):
l.append(3)
def b(l):
l = 5
def c(l):
l = (2,-2)
numbers = [1,2,3,4,5]
a(numbers)
print(numbers)
b(numbers)
print(numbers)
c(numbers)
print(numbers)
打印:
[1, 2, 3, 4, 5, 3]
5
(2,-2)
但它打印:
[1, 2, 3, 4, 5, 3]
[1, 2, 3, 4, 5, 3]
[1, 2, 3, 4, 5, 3]
爲什麼?
編輯:
這是因爲通之間的差異參考和呼籲通過分享!
也許你很迷惑[*通過引用*](https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_reference)與作爲**引用傳遞的對象**(即在Python中,對象是通過*作爲參考)? –
在第一種情況下,您傳入可變對象並對其進行變異。其他情況下,您將本地名稱更改爲指向新值,並且這不會更改調用範圍,您需要'return l'將該值返回到調用範圍,例如, 'numbers = b(numbers)' – AChampion
@AChampion它將不會更新原來的'l'變量。這需要將返回值分配給(全局)變量。 – JohanL