创建不同对象的列表副本

时间:2017-12-10 18:48:41

标签: python list object duplicates

如果a有一个对象列表

for i in range(0,10):
 listA.append(foo(i))

如何将listA复制到listB中,以使对象具有相同的属性,但每个列表中的对象为同一对象。如果我这样做

listA[5].bar = 1

这不会修改listB[5].bar

的值

我的目标是生成初始对象列表的多个副本,并能够对每个列表对象进行操作,因为它们是自己的实例。

1 个答案:

答案 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,因为listAlistB引用同一个对象。

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
相关问题