>>> def test():
... a.remove(1)
>>> a = [1,2]
>>> test()
>>> print a
[2]
为什么a
等于[2]
而不是[1,2]
?
答案 0 :(得分:6)
列表是可变的。如果将它传递给函数,并且函数更改它,它将保持更改状态。
a = (1,2)
b = list(a); b.remove(1)
- 现在a
和b
的内容不同,a
没有更改。另外,尽量不要使用可变的全局数据。将a
传递给函数,或者将a
作为对象的属性,将函数作为其方法。
答案 1 :(得分:2)
目前尚不清楚你想要什么。你的test()函数修改了全局'a'列表,所以'a'被修改就不足为奇了。
如果您希望'test'直接在a上复制a,您可以先复制它。
例如,
def test():
a2 = list(a)
a2.remove(1)
答案 2 :(得分:0)
列表是可变对象,它们应该被更改。如果您要禁止更改,请将其转换为元组(例如a = (1, 2)
)。元组是不可变的,因此如果不复制和重新赋值变量就无法更改它们。
答案 3 :(得分:0)
由于列表a
存在于全局命名空间中,当您在其上调用remove
时,值1
将被删除。
如果您不想修改它,只需创建一个新列表。如果您在列表remove
上致电a
,当然会删除该值。