marshal bug?

Gary Herron gherron at
Fri Sep 28 09:06:55 CEST 2007

Anurag wrote:
> I have been chasing a problem in my code since hours and it bolis down
> to this
> import marshal
> marshal.dumps(str(123)) != marshal.dumps(str("123"))
> Can someone please tell me why?
> when
> str(123) == str("123")
> or are they different?
> it also means that
> if s = str(123)
> marshal.dumps(s) != marshal.dumps(marshal.loads(marshal.dumps(s)))
> rgds
> Anurag

Any string in Python can be "interned" or not, the difference being
how/where the value is stored internally.  The marshal module includes
such information in its output.  What you are doing is probably
considered a misuse of the marshal module.  I'd suggest using the pickle
(or cPickle) modules instead.

Here's the relevant part of the manual for marshal:

    Indicates the format that the module uses. Version 0 is the
    historical format, version 1 (added in Python 2.4) shares interned
    strings and version 2 (added in Python 2.5) uses a binary format for
    floating point numbers. The current version is 2

    Gary Herron.

More information about the Python-list mailing list