Pickle problem

Mario Ceresa ceres83 at gmail.com
Mon Apr 21 04:05:30 EDT 2008


Dear Jerry and George:
it works like a charm! I always thought that the first way was a
quicker alternative to defining the init method... shame on me!

>From now on I'll read the list every day repeating to myself:
"Premature optimization is the root of all evil", "Premature
optimization is the root of all evil", .... :)

Thanks a lot,

Mario


On Fri, Apr 18, 2008 at 8:00 PM, George Sakkis <george.sakkis at gmail.com> wrote:
> On Apr 18, 11:55 am, "Mario Ceresa" <cere... at gmail.com> wrote:
>  > Hello everybody:
>  > I'd like to use the pickle module to save the state of an object so to
>  > be able to restore it later. The problem is that it holds a list of
>  > other objects, say numbers, and if I modify the list and restore the
>  > object, the list itself is not reverted to the saved one, but stays
>  > with one element deleted.
>
>
> > An example session is the following:
>  >
>  > Data is  A [1, 2, 3, 4]
>  > saving a with pickle
>  > Deleting an object: del a[3]
>  > Now data is A [1, 2, 3]
>  > Oops! That was an error: can you please recover to the last saved data?
>  > A [1, 2, 3]     #### I'd like to have here A[1,2,3,4]!!!!!!
>  >
>  > Is it the intended behavior for pickle? if so, are there any way to
>  > save the state of my object?
>  >
>  > Code follows
>  > -----------------------
>  > class A(object):
>  >         objects = []
>  > -----------------------
>  > then I run  the code:
>  > ---------------------------------------
>  > import pickle
>  > from core import A
>  >
>  > a = A()
>  >
>  > for i in [1,2,3,4]:
>  >         a.objects.append(i)
>  >
>  > savedData = pickle.dumps(a)
>  > print "Saved data is ",a
>  > print "Deleting an object"
>  > del a.objects[3]
>  > print a
>  > print "Oops! This was an error: can you please recover the last saved data?"
>  >
>  > print pickle.loads(savedData)
>  > --------------------------------------------
>  >
>  > Thank you for any help!
>  >
>  > Mario
>
>  The problem is that the way you define 'objects', it is an attribute
>  of the A *class*, not the instance you create. Change the A class to:
>
>
>  class A(object):
>     def __init__(self):
>         self.objects = []
>
>  and rerun it; it should now work as you intended.
>
>  HTH,
>  George
>  --
>  http://mail.python.org/mailman/listinfo/python-list
>



More information about the Python-list mailing list