我是Python的新手,我想了解何時可以修改函數中使用的變量。
在下面的示例中,綁定到x
的對象不會被f
修改,如我們在輸出中所看到的。我不明白爲什麼。 根據我的理解,當我們在f
中做x.append(4)
時,我們修改綁定到名稱x
的對象。但看起來情況並非如此,因爲產出。我的錯誤在哪裏?:Python:爲什麼對象沒有被函數修改?
我是否缺少全局變量vs局部變量?
當我們撥打f
時是否有對象的副本?
我的問題類似於this question。然而,結論對我來說並不明確,它並沒有幫助我理解我錯在哪裏。
def f(x):
x = [0,1,2,3]
x.append(4)
print('In f():', x)
x = [0,1,2,3]
print('Before:', x)
f(x)
print('After :', x)
輸出
Before: [0, 1, 2, 3]
In f(): [0, 1, 2, 3, 4]
After : [0, 1, 2, 3]
'x = [0,1,2,3]' - 你這樣做**功能**也。刪除該行,如果不立即用新對象對其進行遮蔽,則會看到參數值* does *被修改。 *「我們修改綁定到名稱'x'的對象」* - 是的,但是您明確綁定了不同的對象。 – jonrsharpe
您並未修改全局名稱空間中的'x',而是修改函數名稱空間中新創建的''x'。它們是不同的對象,即使它們具有相同的名稱(在不同的名稱空間中)。 –
https://nedbatchelder.com/text/names.html – chepner