【问题标题】:lists in python, with references [duplicate]python中的列表,带有引用[重复]
【发布时间】:2010-07-20 12:22:34
【问题描述】:

如何在 Python 中复制列表的内容而不仅仅是对列表的引用?

【问题讨论】:

    标签: python list reference copy


    【解决方案1】:

    查看copy module,注意浅拷贝和深拷贝的区别:

    浅拷贝和深拷贝之间的区别仅与复合对象(包含其他对象,如列表或类实例的对象)有关:

    • 浅拷贝构造一个新的复合对象,然后(在可能的范围内)向其中插入对原始对象的引用。

    • 深拷贝构造一个新的复合对象,然后递归地将在原始对象中找到的对象的副本插入其中。

    【讨论】:

    • 请注意,它仅与可变数据容器相关。包含整数的元组列表不会从 copy.deepcopy 中受益,而包含另一个列表的列表则可以。
    【解决方案2】:

    使用切片表示法。

    newlist = oldlist

    这将为同一个列表分配第二个名称

    newlist = oldlist[:]

    这会将 oldlist 的每个元素复制到一个名为 newlist 的完整新列表中

    【讨论】:

      【解决方案3】:

      除了 Lizard 提到的切片符号,

      你可以使用list()

      newlist = list(oldlist)
      

      或复制

      import copy
      newlist = copy.copy(oldlist)
      

      【讨论】:

        【解决方案4】:

        Lizard 和 gnibbler 的回答是正确的,但我想补充一点,所有这些方法都提供了一个浅拷贝,即:

        l = [[]]
        l2 = l[:] // or list(l) or copy.copy(l)
        l2[0].append(1)
        assert l[0] == [1]
        

        对于深拷贝,您需要 copy.deepcopy()。

        【讨论】:

          猜你喜欢
          • 2020-05-26
          • 2013-05-28
          • 1970-01-01
          • 1970-01-01
          • 2014-07-29
          • 2015-03-31
          • 2021-07-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多