如何在python中按值分配

时间:2013-10-10 15:41:57

标签: python arrays list

据我所知,由于Python工作方式x = []; y = x; x.append(1); y将打印[1]。但是,反过来说,

z = [1,2]
temp = z
temp[1] = 3
z,temp

将打印([1,3],[1,3])。如果我理解正确,ztemp都指向同一个列表,那么更改一个将改变另一个,因为列表是可变的。我怎样才能防止这种情况发生?也就是说,我想创建一个for循环,将z复制到temp,以不同的方式更改它,并将其推送到队列中。为了实现这一点,z必须始终包含基础数组,因此我需要更改temp不会更改z

编辑:我尝试将z更改为元组,以便z=z,,然后调用z[0]而不是z。这仍然无法解决我的问题。

2 个答案:

答案 0 :(得分:7)

复制列表很简单......只需将其切片:

temp = z[:]

这将创建一个浅层副本 - 列表中元素的突变将显示在z中的元素中,但不会直接更改为temp


为了更一般的目的,python有一个copy模块可以使用:

temp = copy.copy(z)

或者,可能:

temp = copy.deepcopy(z)

答案 1 :(得分:4)

为什么不让temp成为z副本

>>> z = [1, 2]
>>> temp = z[:]
>>> temp[1] = 3
>>> z
[1, 2]
>>> temp
[1, 3]
>>>

[:]可以轻松制作列表的浅表副本。

但是,您可能也对copy.copycopy.deepcopy感兴趣,这两者都来自Python的copy模块。