自定义Python的`copy`模块如何处理我的对象

时间:2009-09-08 21:58:49

标签: python copy pickle

来自copy documentation

  

类可以使用相同的接口来控制用于控制酸洗的复制。

     

[...]

     

为了让类定义自己的副本实现,它可以定义特殊方法__copy__()__deepcopy__()

那是哪一个?在酸洗时使用的__setstate__()__getstate__(),或__copy__()__deepcopy__()

2 个答案:

答案 0 :(得分:7)

它的工作原理如下:如果一个类定义__copy__,那么它优先于copy.copy目的(类似地__deepcopy__优先于copy.deepcopy目的)。如果未定义这些非常具体的特殊方法,则会测试与酸洗和去除斑点相同的机制(包括但不限于__getstate____setstate__;我已经写了更多关于此的内容在我的书“Python in a Nutshell”中(@ilfaraone仅部分引用)。

答案 1 :(得分:1)

__setstate__()__getstate__()

请注意,复制文档说他们可以使用相同的界面,但他们不一定会这样做。

请参阅this excerpt中的Python in a Nutshell或Python邮件列表中的this explanation