[Tutor] Pickling objects and then carrying on development

Tim Peters tim.peters at gmail.com
Fri Jul 2 17:19:02 EDT 2004


[Adam]
> OK - I have a kind of strange question. I'm developing an
> application which acts as a catalogue for magazine articles,
> storing each piece of information in an OO manner. I've
> written those objects to disk through pickle, which is an
> enormously cool feature of python.
>
> My question relates to the pickled object and also the code
> that relates to those objects. If I enter data in and pickle
> this data, and then later develop my code adding more
> methods and functionality to each class, will the old data
> automatically gain all this new functionality when it is
> unpickled later?

Yes, it will.  pickle stores only data, never code.  This isn't a
necessary behavior, it's just how things are.  The code that makes up
your class is not pickled.  Instead, when an instance of your class is
pickled, the *path* to your class (its module and class name) is
pickled, as a string.  Unpickling effectively imports the (current)
class code via the path in that string.

Note that this may not always be what you want, though.  For example,
if you rename your class, or move your class into a different module
or package, then you'll no longer be able to load old pickles
referencing that class (using its former name or location).

> The sequence would be:
> 1) Data entry and pickle...
> 2) Develop and improve code
> 3) Load data
> 4) continue with data entry
> 5) pickle once more
> 
> Does the new pickle pick up all the new code that I've been
> working on,

Yes, but because the code was never in the pickle, just the data, and
a string recording from where to import the class.



More information about the Tutor mailing list