追加列表项会创建重复项

问题描述 投票:0回答:2

我有一个列表列表,在其中我复制了一个列表元素,如果我调整了初始元素,那么也会修改新创建的元素。

这是错误吗?

alfa = [[1,2,3,4],[5,6,7,8]]
alfa.append(alfa[0])
alfa[0].insert(0, 'a')

即使我只在列表alfa的第一个元素中不加'a',也将其添加到第三个元素中。

如何避免这种情况?

谢谢

python-3.x list append
2个回答
0
投票

[将alfa[0]附加到alfa时,将第一项的引用附加到alfa。因此,第一项和最后一项是同一对象。因此,修改第一项或第三项将同时更改两者。

代替附加引用,您需要附加一个新对象,它是第一个对象的副本。示例:

alfa = [[1,2,3,4],[5,6,7,8]]
# Magic is `list()`:
alfa.append(list(alfa[0]))
alfa[0].insert(0, 'a')
# Give: [['a', 1, 2, 3, 4], [5, 6, 7, 8], [1, 2, 3, 4]]

更好的解释:How to clone or copy a list?


0
投票

您要附加alfa[0]的引用,因此附加列表中的任何更改也将反映在首字母alfa[0]中,您可以通过在列表alfa上附加列表alfa[0]的副本来解决此问题。 :

alfa.append(alfa[0].copy())
alfa[0].insert(0, 'a')
# [['a', 1, 2, 3, 4], [5, 6, 7, 8], [1, 2, 3, 4]]
© www.soinside.com 2019 - 2024. All rights reserved.