3

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]

对 z 应用 add 函数使 x 不受影响,因为它应该这样做。

这让我对我正在处理的删除“NA”脚本感到头疼。您是否知道该del语句发生了什么,以及如何解决此问题,以便如果我设置z=x然后将 del 应用于z,则x保持不变?

4

1 回答 1

9

z = x不制作列表的副本。z 和 x 现在指向同一个列表。该列表的任何修改都将通过名称 z 和 x 可见。

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

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

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

z = x[:]
z = list(x)
于 2012-11-11T02:59:21.703 回答