究竟是什么关系pickle和copy.deepcopy?他们分享了哪些机制,以及如何?
很明显这两个是密切相关的操作,并分享了一些机制/协议,但我不能围绕细节.
我发现的一些(令人困惑的)事情:
__[gs]etstate__,则会调用它们deepcopy的实例.这让我感到惊讶,因为我认为它们是特定的pickle,但后来我发现Classes可以使用相同的接口来控制用于控制酸洗的复制.但是,没有关于 __[gs]etstate__深度复制时如何使用的文档(如何使用返回的值__getstate__,传递给__setstate__什么?)deepcopy将是pickle.loads(pickle.dumps(obj)).但是,这不可能等同于deepcopy',因为如果一个类定义了一个__deepcopy__操作,那么使用这个基于pickle的deepcopy实现就不会调用它.(我还偶然发现了一个声明,即深度复制比pickle更普遍,并且有许多类型是深度可复制的,但不是pickleable.)(1)表示共性,而(2)表示pickle和之间的差异deepcopy.
最重要的是,我发现了这两个相互矛盾的陈述:
copy_reg:pickle,cPickle和copy模块在pickle /复制这些对象时使用这些函数
和
该复制模块不使用copy_reg注册模块
对此,一方面,是之间的关系/共性的另一个指示pickle和deepcopy,而在另一方面,有助于我的困惑......
[我的经验是使用python2.7,但我也很感激有关python2和python3之间的pickle/deepcopy差异的任何指示]