Pickle problem

George Sakkis george.sakkis at gmail.com
Fri Apr 18 14:00:06 EDT 2008


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



More information about the Python-list mailing list