当我更改一个列表时,另一个列表也发生了变化。
a = [[1, 1], [2, 2], [3, 3]]
b = list(a)
a[0][0] = 100
print(a)
print(b)
当我这样做时,a是[[100, 1], [2, 2], [3, 3]]
。 b也是[[100, 1], [2, 2], [3, 3]]
执行b = a[:]
也无法解决问题。
为什么会这样?
答案 0 :(得分:4)
你做的是一份浅色的副本。浅层复制和深层复制之间的区别仅与复合对象(包含其他对象的对象,如列表或类实例)相关:
浅复制构造一个新的复合对象,然后(尽可能)将对它的引用插入到原始对象中找到的对象。 深拷贝构造一个新的复合对象,然后递归地将副本插入到原始对象中找到的对象。
您想要创建一个全新的对象,以便不会干扰其他对象。以下是如何进行深层复制。
import copy
a = [[1, 1], [2, 2], [3, 3]]
b = copy.deepcopy(a)
a[0][0] = 100
print(a)
print(b)
答案 1 :(得分:1)
您遇到的问题是由于列表a
的浅层复制,您可以执行此类操作。制作列表中存在的项目的副本(浅拷贝)
>>> a = [[1, 1], [2, 2], [3, 3]]
>>> b = [list(x) for x in a]
>>> a[0][0] = 100
>>> a
[[100, 1], [2, 2], [3, 3]]
>>> b
[[1, 1], [2, 2], [3, 3]]