复制嵌套列表,然后仅更新新列表中的值

时间:2014-08-01 07:45:59

标签: python list updating

我有一个嵌套列表,我制作了一个新的副本(ID不同)。然后,当我尝试使用索引来更新新列表中的列表时,它最终会更新复制前和列表后的值。

我看了一些关于可变性的其他类似问题,但我并不是100%确定我理解它在我的具体案例中是如何运作的。

下面是一些示例代码:

numTrials = 2

abPositions = [[1, 'a.png', [9, 9, 9, 9]], [1, 'b.png', [9, 9, 9, 9]]]

abPositionsRotated = list(abPositions)

for i in xrange(numTrials):
    abPositionsRotated[i][2] = [0,0,0,0]

print abPositions
print abPositionsRotated

所以当我更新abPositionsRotated中的2个子列表时,同样的列表也会在abPositions中更新,我不知道为什么。据我所知,abPositions和abPositionsRotated之间没有联系,所以我不明白为什么一个更改会影响另一个

1 个答案:

答案 0 :(得分:1)

在Python中使用嵌套列表进行别名对于那些不习惯它的人来说可能有点棘手。你正在做的是创建一个单独的列表,但是单独(外部)列表中的每个嵌套列表指向同一个内存。这里的解决方案很简单:使用deepcopy模块中的copy

from copy import deepcopy

abPositions = [[1, 'a.png', [9, 9, 9, 9]], [1, 'b.png', [9, 9, 9, 9]]]
abPositionsRotated = deepcopy(abPositions)

# Now any operation on abPositionsRotated will only apply to it

在完全独立的说明中,您应该阅读PEP8,这是Python的样式指南。