Challenge supporting custom deepcopy with inheritance

Lie Ryan lie.1296 at gmail.com
Tue Jun 2 06:34:43 EDT 2009


Gabriel Genellina wrote:
> En Mon, 01 Jun 2009 14:19:19 -0300, Michael H. Goldwasser
> <goldwamh at slu.edu> escribió:
> 
>>   I can examine the inherited slots to see which special methods are
>>   there, and to implement my own __deepcopy__ accordingly. But to do
>>   so well seems to essentially require reimplementing the complicated
>>   logic of the copy.deepcopy function.  That is, if my new class is
>>   the first to be implementing an explicit __deepcopy__ function, I
>>   seem to have no easy way to invoke the inherited version of
>>   "deepcopy(self)".
> 
> Yes, that's a problem. But there is a workaround: since __deepcopy__ is
> searched *in the instance* (unlike many other __special__ methods, that
> are usually searched in the class itself) you can fool the copy logic
> into thinking there is no __deepcopy__ method defined, just by
> (temporarily) setting an instance attribute __deepcopy__ to None. (It's
> a hack, anyway)

I've never really used pickle before but maybe you could try pickling
then unpickling? It is a hack, but for some objects that does not have
__deepcopy__ it might be sufficient.




More information about the Python-list mailing list