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应用于z
,x
仍然存在不变?
答案 0 :(得分:9)
z = x
不会复制列表。 z和x现在指向相同的列表。通过名称z和x可以看到对该列表的任何修改。
使用z + [6]
,您未将结果分配回z
。这样做之后尝试打印z
。它将保持不变,就像x
。
z += [6]
必须将结果分配回z
,并且它与第一个示例的行为相同。
您可以使用以下方法之一复制列表:
z = x[:]
z = list(x)