擅长:python、mysql、java
<p>如果方法存在,<code>copy.deepcopy</code>将只调用<code>__deepcopy__</code>-我们可以通过保存<code>__deepcopy__</code>的值,调用<code>copy.deepcopy(...)</code>,然后在返回结果之前恢复{<cd2>}的值来避免这种情况:</p>
<pre><code>class CustomDeepcopy(object):
a = SomeSimpleObject()
b = SomeBigObject()
def dont_deepcopy(self):
return ['b']
def __deepcopy__(self,memo):
for attr in self.dont_deepcopy():
val = getattr(self,attr,None)
if val is not None:
memo[id(val)]=val
deepcopy_method = self.__deepcopy__
self.__deepcopy__ = None
result = copy.deepcopy(self,memo)
self.__deepcopy__ = deepcopy_method
return result
</code></pre>