【发布时间】:2020-07-28 23:44:04
【问题描述】:
我在 python 中有两个列表,它们以不同的方式(例如顺序)存储一些类实例。现在,我想出于某种目的创建这两个列表的副本(独立于现有列表)。为了清楚地说明我的问题,我在下面创建了一个演示代码。
import copy
class Node:
def __init__(self):
self.node_id = 0
node = Node()
list1 = [node]
list2 = [node]
u_list1 = copy.deepcopy(list1)
u_list2 = copy.deepcopy(list2)
id1 = id(list1[0])
id2 = id(list2[0])
u_id1 = id(u_list1[0])
u_id2 = id(u_list2[0])
通过使用 deepcopy 操作,我创建了两个新列表 u_list1 和 u_list2,它们独立于 list1 和 list2,这正是我所需要的。不过,我发现了一个问题。 u_list1 和 u_list2 中的节点实例现在也是独立的。它们在内存中有不同的地址。 u_list1 和 u_list2 中的相同实例是否仍然像 list1 和 list2 中的实例一样共享一个地址?
我需要的是id1 = id2,u_id1 = u_id2,而id1 != u_id1。
【问题讨论】:
-
只是一种更 Pythonic 的方式来编写需求:
id2 == id1 != u_id1 == u_id2:-)