STINNER Victor <vstin...@python.org> added the comment:
PR 20960 (_bz2 module) triggers an interesting question. The effect of converting a static type to a heap type on pickle, especially for protocols 0 and 1. pickle.dumps(o, 0) calls object.__reduce__(o) which calls copyreg._reduce_ex(o, 0). copyreg._reduce_ex() behaves differently on heap types: ... for base in cls.__mro__: if hasattr(base, '__flags__') and not base.__flags__ & _HEAPTYPE: break else: base = object # not really reachable ... There are 3 things which impacts serialization/deserialization: - Py_TPFLAGS_HEAPTYPE flag in the type flags - Is __new__() overriden in the type? - Py_TPFLAGS_BASETYPE flag in the type flags Examples: * In Python 3.7, _random.Random() cannot be serialized because it's a static type (it doesn't have (Py_TPFLAGS_HEAPTYPE) * In master, _random.Random() cannot be deserialized because _random.Random() has __new__() method (it's not object.__new__()) ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue40077> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com