为了账号安全,请及时绑定邮箱和手机立即绑定

两个列表的深层复制

两个列表的深层复制

慕娘9325324 2023-04-11 15:37:19
我在 python 中有两个列表,它们以不同的方式(例如顺序)存储一些类实例。现在,出于某种目的(独立于现有列表),我想创建这两个列表的副本。为了清楚地说明我的问题,我在下面创建了一个演示代码。import copyclass Node:    def __init__(self):        self.node_id = 0node = 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 操作,我创建了两个独立于and的新u_list1列表,这正是我所需要的。但是,我发现一个问题。和中的节点实例现在也是独立的。它们在内存中有不同的地址。和中的相同实例是否可能仍然共享一个地址,就像和中的实例一样?u_list2list1list2u_list1u_list2u_list1u_list2list1list2我需要的是id1 = id2, u_id1 = u_id2, while id1 != u_id1。
查看完整描述

1 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

您可以deepcopy通过将它们深度复制在一起来使用 的备忘录方面:

u_list1, u_list2 = copy.deepcopy((list1, list2))

从文档(强调我的):

浅拷贝操作不存在的深拷贝操作通常存在两个问题:

  • 递归对象(直接或间接包含对自身的引用的复合对象)可能会导致递归循环。

  • 因为深拷贝复制了它可能复制太多的所有东西,比如打算在副本之间共享的数据。

deepcopy() 函数通过以下方式避免了这些问题:

  • 保留当前复制过程中已复制对象的备忘录字典;


查看完整回答
反对 回复 2023-04-11
  • 1 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信