我是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