deepcopy alternative?
Gabriel Genellina
gagsl-py at yahoo.com.ar
Mon Jan 29 23:54:53 EST 2007
En Mon, 29 Jan 2007 20:17:11 -0300, <"none <"@bag.python.org> escribió:
> I have a very complex data structure which is basically a class object
> containing (sometimes many) other class objects,
What are "class objects"? instances of a given class, or a class itself?
> function references,
> ints, floats, etc. The man for the copy module states pretty clearly
> that it will not copy methods or functions. I've looked around for a
> while (prob just using the wrong keywords) and haven't found a good
> solution. As a workaround I've been using cPickle, loads(dumps(obj))
> which is incredibly slow (~8 sec for a 1000 elem list).
>
> I believe the only thing stopping me from doing a deepcopy is the
> function references, but I'm not sure. If so is there any way to
> transform a string into a function reference(w/o eval or exec)?
What do you mean by "function reference"? A module-level function works
fine both with pickle and copy. Methods do not; but it's not common to
take methods out of a class and put them inside a tuple, by example...
>
> Example
> from copy import deepcopy
> a = ClassObj([ClassObj([3.2, 'str', funcRef]), 4, ClassObj[funcRef])
> b = deepcopy(a)
> TypeError: function() takes at least 2 arguments (0 given)
Please provide a *running* example. I've added some definitions, corrected
some syntax errors, and this full example works for me:
--- cut ---
from copy import deepcopy
class ClassObj(object):
def __init__(self, args):
self.data = args
def funcRef(x):
print x
a = ClassObj([ClassObj([3.2, 'str', funcRef]), 4, ClassObj([funcRef])])
b = deepcopy(a)
print a is b
a.data.append('hello')
print len(a.data), len(b.data)
--- cut ---
> PS: If the answer to this is in __getstate__() or __setstate__() is
> there some reference to how these should be implemented besides the
> library reference?
Until you provide more info on your problem it's hard to tell.
--
Gabriel Genellina
More information about the Python-list
mailing list