python list.copy浅vs深拷贝

这个问题在这里已经有了答案:

  • 深拷贝和浅拷贝之间有什么区别? 30个答案
  • 浅拷贝,深拷贝和正常赋值操作的区别究竟是什么? 8个答案

  • 在这种情况下,你简单地误解了“浅”和“深”的含义。

    浅拷贝只是元素顶层的副本。 如果这些元素中的任何一个都是自己的列表,这些副本仍然会引用原始列表。 这是l1[:]l1.copy()所做的。

    深层副本是各级副本。 如果任何元素是列表,它们也将被深度复制。 将不会分享任何参考。 这是copy.deepcopy()所做的。


    浅拷贝意味着新列表保存对旧列表所具有的相同对象的引用。

    例如:

    foo = [1, 2, []]
    bar = foo.copy()
    bar[-1].append(3)
    print(foo)
    

    我们会看到bar的物体突变也“污染” foo

    如果我们使用深层副本重新执行此示例,则会有所不同:

    import copy
    foo = [1, 2, []]
    bar = copy.deepcopy(foo)
    bar[-1].append(3)
    print(foo)
    

    这是因为深层副本创建列表的新(深层副本),而不是仅复制到旧列表的引用。

    链接地址: http://www.djcxy.com/p/79355.html

    上一篇: python list.copy shallow vs deep copy

    下一篇: deep copy and shallow copy