[issue16475] Support object instancing and recursion in marshal

Kristján Valur Jónsson report at bugs.python.org
Fri Nov 16 16:39:37 CET 2012


Kristján Valur Jónsson added the comment:

Basically, reuse of strings (and preservation of their internment status) fell by the wayside somewhere in the 3.x transition.  Strings have been reused, and interned strings re-interned, since protocol version 1 in 2.x.  This patch adds that feature back, and uses that mechanism to reuse not only strings, but also any other multiply-referenced object.

It is not desirable to simply intern all strings that are read from marshaled data.  Only selected strings are interned by python during compilation and we want to keep it that way.  Also, 2.x reuses not only interned strings but other strings as well.

Generalizing reuse of strings to other objects is trivial, and a logical step forward.  This allows optimizations to be made on code objects where common data are identified and instanced, and those code objects to be saved and reloaded with that instancing intact.

But even without such code-object optimization, the changes are significant:
The sizes of the marshaled code object of lib/test/test_marshal drops from 24093 bytes in version 2 to 17841 bytes with version 3, without any additional massaging of the module code object.

----------

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue16475>
_______________________________________


More information about the Python-bugs-list mailing list