我有一个嵌套列表,我制作了一个新的副本(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之间没有联系,所以我不明白为什么一个更改会影响另一个
答案 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的样式指南。