擅长:python、mysql、java
<p>你不应该被(1)和(2)混淆。一般来说,Python会尝试为丢失的方法包含合理的回退。(例如,定义<code>__getitem__</code>以拥有iterable类就足够了,但是实现<code>__iter__</code>可能更有效。类似于<code>__add__</code>,可选的<code>__iadd__</code>等。)</p>
<p><code>__deepcopy__</code>是<code>deepcopy()</code>要寻找的最专门的方法,但是如果它不存在,返回pickle协议是一件明智的事情。它并没有真正地调用<code>dumps()</code>/<code>loads()</code>,因为它不依赖中间表示作为字符串,而是间接地使用<code>__getstate__</code>和{<cd10>}(通过<code>__reduce__</code>)。在</p>
<p>当前,<a href="http://docs.python.org/2/library/copy.html" rel="noreferrer">the documentation</a>仍处于状态</p>
<blockquote>
<p>… The copy module does not use the copy_reg registration module.</p>
</blockquote>
<p>但这似乎是<a href="http://bugs.python.org/issue11481" rel="noreferrer">a bug that has been fixed in the meantime</a>(可能,2.7分支在这里没有得到足够的关注)。在</p>
<p>还要注意的是,这已经非常深入地集成到Python中了(至少现在是这样)<code>object</code>类本身实现了<code>__reduce__</code>(及其版本化的_-ex-variant),它引用{<cd14>}来创建给定对象派生类的新实例。在</p>