pickle provides a general framework for objects to
disassemble themselves into a stream of bytes and to reassemble such a
stream back into an object. It copes with reference sharing,
recursive objects and instances of user-defined classes, but not
(directly) with objects that have ``magical'' links into the operating
system such as open files, sockets or windows.
pickle module defines a simple protocol whereby
user-defined classes can control how they are disassembled and
assembled. The method
__getinitargs__(), if defined, returns
the argument list for the constructor to be used at assembly time (by
default the constructor is called without arguments). The methods
__setstate__() are used to pass
additional state from disassembly to assembly; by default the
__dict__ is passed and restored.
pickle does not open or close any files -- it can be
used equally well for moving objects around on a network or store them
in a database. For ease of debugging, and the inevitable occasional
manual patch-up, the constructed byte streams consist of printable
ASCII characters only (though it's not designed to be pretty).
shelve provides a simple model for storing objects
on files. The operation
shelve.open(filename) returns a
``shelf'', which is a simple persistent database with a
dictionary-like interface. Database keys are strings, objects stored
in the database can be anything that
pickle will handle.