python del函数中的“回溯”变量

时间:2012-11-11 02:52:32

标签: python

python中的del语句,当应用于列表时,会做一些非常奇怪的事情。它不仅会删除相关列表中的条目,还会“回溯”以删除变量派生自的任何列表中的相同元素。

例如:

>>> x
[1, 2, 3, 4, 5]
>>> z=x
>>> del z[1]
>>> z
[1, 3, 4, 5]
>>> x
[1, 3, 4, 5]

换句话说,即使我将删除应用于z,删除也会应用于x。这种“回溯”没有提出任何其他命令或功能,例如

>>> x=[1,2,3,4,5]
>>> z=x
>>> z+[6]
[1, 2, 3, 4, 5, 6]
>>> x
[1, 2, 3, 4, 5]

将add函数应用于z会使x不受影响,因为它非常适合。

这引起了我正在处理的删除'NA'脚本的各种令人头疼的问题。你知道del语句发生了什么吗?我怎样才能解决这个问题,这样如果我设置z=x然后将del应用于zx仍然存在不变?

1 个答案:

答案 0 :(得分:9)

z = x不会复制列表。 z和x现在指向相同的列表。通过名称z和x可以看到对该列表的任何修改。

使用z + [6],您未将结果分配回z。这样做之后尝试打印z。它将保持不变,就像x

z += [6]必须将结果分配回z,并且它与第一个示例的行为相同。

您可以使用以下方法之一复制列表:

z = x[:]
z = list(x)