我有一个列表列表,在其中我复制了一个列表元素,如果我调整了初始元素,那么也会修改新创建的元素。
这是错误吗?
alfa = [[1,2,3,4],[5,6,7,8]]
alfa.append(alfa[0])
alfa[0].insert(0, 'a')
即使我只在列表alfa的第一个元素中不加'a',也将其添加到第三个元素中。
如何避免这种情况?
谢谢
[将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]]
您要附加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]]