基本的python。如何禁止更改列表的功能?

时间:2011-01-30 08:28:42

标签: python list function

>>> def test():
...    a.remove(1)
>>> a = [1,2]
>>> test()
>>> print a 
[2]

为什么a等于[2]而不是[1,2]

4 个答案:

答案 0 :(得分:6)

列表是可变的。如果将它传递给函数,并且函数更改它,它将保持更改状态。

  • 使用不可变结构:元组:a = (1,2)
  • 传递原始列表的副本:b = list(a); b.remove(1) - 现在ab的内容不同,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,当然会删除该值。