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
Your problem is in the class definition of A. You declare objects as
a class variable, so it is shared between every instance of the class.
When you pickle the instance a, then restore it, it continues to
reference the same list, which is help by the class.
You probably want the objects list to be an instance variable, like this:
class A(object):
def __init__(self):
self.objects = []
If you make that change, pickling and unpickling works the way you expect.
--
Jerry
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
>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