How to copy an instance without its cStringIO.StringO item ?

Barak, Ron Ron.Barak at lsi.com
Mon Feb 9 04:51:45 EST 2009


Hi John,

Thanks for the suggestion.

What I do now in preparation for pickling is:

            for_pickle_log_stream = LogStream(sac_log_file)
            for key in log_stream.__dict__:
                if key != "input_file":
                    for_pickle_log_stream.__dict__[key] = log_stream.__dict__[key]
            del for_pickle_log_stream.__dict__["input_file"]

(i.e., log_stream is the source instance, and for_pickle_log_stream is the target)

So, it seems to be in agreement with your suggestion.

Thanks and bye,
Ron.

-----Original Message-----
From: John Machin [mailto:sjmachin at lexicon.net]
Sent: Sunday, February 08, 2009 23:04
To: python-list at python.org
Subject: Re: How to copy an instance without its cStringIO.StringO item ?

On Feb 9, 1:01 am, Christian Heimes <li... at cheimes.de> wrote:
> Barak, Ron schrieb:
>
> > Hi,
>
> > I need to copy an instance of a class, where one of the items in the original is a cStringIO.StringO object.
> > I do not need the cStringIO.StringO in the target object.
> > The target instance is to be pickled.
>
> > Googling made me devise the following plan: do a deepcopy from the original to the target, and then delete the cStringIO.StringO object from the target.
>
> > However, trying to use copy.deepcopy produced: TypeError:
> > object.__new__(cStringIO.StringO) is not safe, use
> > cStringIO.StringO.__new__()
>
> > Is there a way to create a copy of the instance, sans the cStringIO.StringO ?
>
> > If I find no elegant way to do that, I thought of creating a "blank" target instance; then iterating over the __dict__ of the original, and manually copy the items to the target (while not copying the cStringIO.StringO to the target).
>
> > Can you suggest a better way ?
>
> You can overwrite some functions in order to omit attributes from a
> pickle. It's all documented athttp://docs.python.org/library/pickle.html#pickling-and-unpickling-no...

If there is no chance that some other thread could be accessing the source object, can't the OP just do:
    temp = source.stringio
    del source.stringio
    # make a pickle from source
    source.stringio = temp
?




-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20090209/0ea4f0e6/attachment-0001.html>


More information about the Python-list mailing list