Python字典deepcopy

man*_*del 20 python dictionary deep-copy

我想知道在以下背景下,深度复制是如何工作的:

from copy import deepcopy

def copyExample:
    self.myDict = {}
    firstPosition = "First"
    firstPositionContent = ["first", "primero"]
    secondPosition = "Second"
    secondPositionContent = ["second"]
    self.myDict[firstPosition] = firstPositionContent 
    self.myDict[secondPosition] = secondPositionContent
    return deepcopy(self.myDict)

def addExample(self):
    copy =  self.copyExample()
    copy["Second"].add("segundo")
Run Code Online (Sandbox Code Playgroud)

它是否返回对字典中列表的引用?或者它是否按预期工作并复制具有不同引用的新列表中的每个列表?

我知道什么是深层复制(所以没有必要解释深层和浅层之间的区别),但我想知道它是否像我期望的那样工作,因此在我使用时不会更改实例变量addExample().

Bjo*_*orn 15

文档非常清楚地表明您正在获取新副本,而不是参考.Deepcopy为内置类型创建深层副本,但有各种例外,您可以将自定义复制操作添加到用户定义的对象中,以获得对它们的深层复制支持.如果您不确定,那就是单元测试的用途.

  • Deepcopy有一个简短的例外列表.其他一切都被复制了."此模块不会复制模块,方法,堆栈跟踪,堆栈帧,文件,套接字,窗口,数组或任何类似类型等类型." 你得到一个新的清单.不是对列表的引用,而是新列表.从您的示例中打印两个词典并查看它们. (7认同)