如果a有一个对象列表
for i in range(0,10):
listA.append(foo(i))
如何将listA
复制到listB
中,以使对象具有相同的属性,但每个列表中的对象不为同一对象。如果我这样做
listA[5].bar = 1
这不会修改listB[5].bar
我的目标是生成初始对象列表的多个副本,并能够对每个列表对象进行操作,因为它们是自己的实例。
答案 0 :(得分:2)
您可以使用deepcopy
执行所需的操作。
以下是一个例子:
import copy
listA = [1,2,3,4]
listB = copy.deepcopy(listA)
listB[0] = 7
print("List A: {}".format(listA)) # List A: [1,2,3,4]
print("List B: {}".format(listB)) # List B: [7,2,3,4]
这将创建一个全新的列表listB
,其值与listA
相同。
执行简单分配时,例如:
listA = [1,2,3,4]
listB = listA
print(listA is listB) # True
这将打印True
,因为listA
和listB
引用同一个对象。
deepcopy
将创建一个新对象:
import copy
listA = [1,2,3,4]
listB = copy.deepcopy(listA)
print(listA is listB) # False
或者,您可以使用list
构造函数创建新列表。
listA = [1,2,3,4]
listB = list(listA)
print(listA is listB) # False