如何在不可能进行酸洗时进行深度复制

时间:2015-12-08 09:51:55

标签: python python-3.x dictionary pickle deep-copy

我正在尝试在Python 3.4中对字典进行深度复制,但有些值不是“可选”的,即当我尝试对字典进行深度复制时,会引发RuntimeError异常

\xef\xbb\xbf

对字典进行深度复制的最佳选择是什么?

到目前为止,我正在递归迭代字典并创建一个新字典,但我想知道是否有更强大和更优雅的解决方案。

注意:我无法修改DataObject结构以支持pickle。

1 个答案:

答案 0 :(得分:3)

您可以将复制功能添加到copyreg module以处理无法腌制的类型:

{
  "dependencies": {
    "Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0"
  },
  "frameworks": {
    "uap10.0": {}
  },
  "runtimes": {
    "win10-arm": {},
    "win10-arm-aot": {},
    "win10-x86": {},
    "win10-x86-aot": {},
    "win10-x64": {},
    "win10-x64-aot": {}
  }
}

这个想法是你返回一个构造函数和要传递给构造函数的参数来重新创建原始值。

import copyreg pickle_dataobject(do): return DataObject, (do.arg1, do.arg2) copyreg.pickle(DataObject, pickle_dataobject) 函数在copy.deepcopy()为真时使用上面的pickle_dataobject()获取副本(在ob is DataObject字典{{1}中查找该类添加你的功能)。