无法进行酸洗时如何进行深度复制
how to deepcopy when pickling is not possible
我正在尝试深度复制 Python 3.4 中的字典,但某些值不是 "pickable",即当我尝试深度复制字典时,它会引发 RuntimeError 异常
*** RuntimeError: Pickling of "DataObject" instances is not enabled (http://www.boost.org/libs/python/doc/v2/pickle.html)
深度复制字典的最佳选择是什么?
到目前为止,我正在递归遍历字典并创建一个新字典,但我想知道是否有更稳健和优雅的解决方案。
注意:我无法修改 DataObject 结构以支持 pickling。
您可以向 copyreg
module 添加复制函数来处理无法 pickle 的类型:
import copyreg
pickle_dataobject(do):
return DataObject, (do.arg1, do.arg2)
copyreg.pickle(DataObject, pickle_dataobject)
这个想法是你 return 一个构造函数和要传递给构造函数的参数以重新创建原始值。
copy.deepcopy()
函数然后使用上面的 pickle_dataobject()
在 ob is DataObject
为真时获取副本(在 copyreg.dispatch_table
中查找 class copyreg.pickle()
添加你的函数的字典)。
我正在尝试深度复制 Python 3.4 中的字典,但某些值不是 "pickable",即当我尝试深度复制字典时,它会引发 RuntimeError 异常
*** RuntimeError: Pickling of "DataObject" instances is not enabled (http://www.boost.org/libs/python/doc/v2/pickle.html)
深度复制字典的最佳选择是什么?
到目前为止,我正在递归遍历字典并创建一个新字典,但我想知道是否有更稳健和优雅的解决方案。
注意:我无法修改 DataObject 结构以支持 pickling。
您可以向 copyreg
module 添加复制函数来处理无法 pickle 的类型:
import copyreg
pickle_dataobject(do):
return DataObject, (do.arg1, do.arg2)
copyreg.pickle(DataObject, pickle_dataobject)
这个想法是你 return 一个构造函数和要传递给构造函数的参数以重新创建原始值。
copy.deepcopy()
函数然后使用上面的 pickle_dataobject()
在 ob is DataObject
为真时获取副本(在 copyreg.dispatch_table
中查找 class copyreg.pickle()
添加你的函数的字典)。