Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基本python。如何禁止函数更改列表?_Python_List_Function - Fatal编程技术网

基本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)