python del函数中的"回溯"变量

use*_*498 3 python

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

例如:

>>> x
[1, 2, 3, 4, 5]
>>> z=x
>>> del z[1]
>>> z
[1, 3, 4, 5]
>>> x
[1, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

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

>>> x=[1,2,3,4,5]
>>> z=x
>>> z+[6]
[1, 2, 3, 4, 5, 6]
>>> x
[1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

将add函数应用于z使x不受影响,因为它应该是.

这让我感到各种令人头疼的问题,我正在处理删除'NA'脚本.你知道del声明发生了什么吗?如何解决这个问题,以便如果我设置z=x然后应用del z,x保持不变?

Fog*_*ird 9

z = x没有制作清单的副本.z和x现在指向相同的列表.通过名称z和x可以看到对该列表的任何修改.

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

z += [6]将结果分配回来是必要的,z它将具有与第一个示例相同的行为.

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

z = x[:]
z = list(x)
Run Code Online (Sandbox Code Playgroud)

  • 是的,所以如果`z`和`x`指向同一个列表,前者将更新两个变量指向的列表,而`z = z + [6]`将把`z`分配给一个新的更长列表并且让`x`指向原始列表. (3认同)