Anyway since it's easy and makes sense I think
the next version of nucular will have a
switchable option between marshal and cPickle
for persistant storage.
Makes more sense to use cPickle and be done with it.
FWIW, I've updated the docs to be absolutely clear on the subject:
'''
This is not a general "persistence" module. For general persistence
and
transfer of Python objects through RPC calls, see the
modules :mod:`pickle` and
:mod:`shelve`. The :mod:`marshal` module exists mainly to support
reading and
writing the "pseudo-compiled" code for Python modules of :file:`.pyc`
files.
Therefore, the Python maintainers reserve the right to modify the
marshal format
in backward incompatible ways should the need arise. If you're
serializing and
de-serializing Python objects, use the :mod:`pickle` module instead --
the
performance is comparable, version independence is guaranteed, and
pickle
supports a substantially wider range of objects than marshal.
... warning::
The :mod:`marshal` module is not intended to be secure against
erroneous or
maliciously constructed data. Never unmarshal data received from
an
untrusted or unauthenticated source.
Not all Python object types are supported; in general, only objects
whose value
is independent from a particular invocation of Python can be written
and read by
this module. The following types are supported: ``None``, integers,
long
integers, floating point numbers, strings, Unicode objects, tuples,
lists,
dictionaries, and code objects, where it should be understood that
tuples, lists
and dictionaries are only supported as long as the values contained
therein are
themselves supported; and recursive lists and dictionaries should not
be written
(they will cause infinite loops).
... warning::
Some unsupported types such as subclasses of builtins will appear
to marshal
and unmarshal correctly, but in fact, their type will change and
the
additional subclass functionality and instance attributes will be
lost.
... warning::
On machines where C's ``long int`` type has more than 32 bits (such
as the
DEC Alpha), it is possible to create plain Python integers that are
longer
than 32 bits. If such an integer is marshaled and read back in on a
machine
where C's ``long int`` type has only 32 bits, a Python long integer
object
is returned instead. While of a different type, the numeric value
is the
same. (This behavior is new in Python 2.2. In earlier versions,
all but the
least-significant 32 bits of the value were lost, and a warning
message was
printed.)
'''