可能的重复:
了解 Python 传递函数参数的对象调用风格
我最近遇到了这个:
x = [1,2,3]
def change_1(x):
x = x.remove(x[0])
return x
结果是:
>>> change_1(x)
>>> x
[2, 3]
我发现这种行为令人惊讶,因为我认为函数内部的任何内容都不会影响外部变量。此外,我构建了一个示例,其中基本上做同样的事情但没有使用remove
:
x = [1,2,3]
def change_2(x):
x = x[1:]
return x
结果是:
>>> change_2(x)
[2, 3] # Also the output prints out here not sure why this is
>>> x
[1, 2, 3]
我得到了我期望的结果,函数不会改变 x。
所以它必须是remove
有效果的特定的东西。这里发生了什么?