我理解,由于 Python 的工作方式 x = []; y = x; x.追加(1); y 将打印 [1]。然而,反过来说,
z = [1,2]
temp = z
temp[1] = 3
z,temp
将打印 ([1,3],[1,3])。如果我理解正确,z 和 temp 都指向同一个列表,所以改变一个会改变另一个,因为列表是可变的。我怎样才能防止这种情况发生?也就是说,我想制作一个 for 循环,将 z 复制到 temp 中,以不同的方式更改它,并将其推送到队列中。为此,z 必须始终包含基本数组,因此我需要更改 temp 不会更改 z。
编辑:我尝试将 z 更改为一个元组,以便 z=z,,然后调用 z[0] 而不是 z。这仍然不能解决我的问题。
请您参考如下方法:
复制一个列表很容易......只需将它切片:
temp = z[:]
这将创建一个浅拷贝——列表中元素的突变将显示在 z 中的元素中,但不会直接更改为 temp。
对于更一般的用途,python 有一个copy 模块,您可以使用:
temp = copy.copy(z)
或者,可能:
temp = copy.deepcopy(z)
