基本python。如何禁止函数更改列表?
为什么基本python。如何禁止函数更改列表?,python,list,function,Python,List,Function,为什么a等于[2]而不是[1,2]?不清楚你想要什么。您的test()函数修改全局“a”列表,因此修改“a”并不奇怪 如果您希望“测试”处理的是的副本,而不是直接处理的副本,则可以先复制它 比如说, >>> def test(): ... a.remove(1) >>> a = [1,2] >>> test() >>> print a [2] 列表是可变的对象,它们应该被更改。如果要禁止更改,请将其转换为元组(例如
a
等于[2]
而不是[1,2]
?不清楚你想要什么。您的test()函数修改全局“a”列表,因此修改“a”并不奇怪
如果您希望“测试”处理的是的副本,而不是直接处理的副本,则可以先复制它
比如说,
>>> def test():
... a.remove(1)
>>> a = [1,2]
>>> test()
>>> print a
[2]
列表是可变的对象,它们应该被更改。如果要禁止更改,请将其转换为元组(例如
a=(1,2)
)。元组是不可变的,因此不复制和重新分配变量就无法更改元组。列表是可变的。如果您将其传递给一个函数,而该函数更改了它,那么它将保持更改状态
- 使用不可变结构:tuple:
a=(1,2)
- 传递原始列表的副本:
-现在b=列表(a);b、 删除(1)
和a
有不同的内容,b
没有更改a
另外,尽量不要使用可变的全局数据。将
a
传递给函数,或者将a
作为对象的属性,并将函数作为其方法。因为列表a
存在于全局命名空间中,当您对其调用remove
时,值1
将被删除
如果不想修改,只需创建一个新列表。如果您在列表
a
上调用remove
,它当然会删除该值。请下次使用代码格式,并在发布问题之前查看预览。这使用全局变量,这是一个非常糟糕的主意。你以前在哪里见过这样的代码示例?你不应该仅仅把元组看作是一个不可变的列表。Python不是关于控制函数的功能。函数doc string应该告诉您它是否修改了参数/globals等。因此+1表示建议传递副本,而-1表示为此原因切换到不可变结构。@gnibler:使用不可变结构可以防止意外修改它。Python几乎没有任何静态检查,有时您可能希望有点防御性。而且,不可变的结构可以很容易地共享和重用;共享可变结构总是比较棘手。
def test():
a2 = list(a)
a2.remove(1)