[Python-Dev] Pickle implementation questions

"Martin v. Löwis" martin at v.loewis.de
Fri Jun 30 07:09:19 CEST 2006


Bruce Christensen wrote:
> In developing a cPickle module for IronPython that's as compatible as
> possible with CPython, these questions have come up: 

[I wish you were allowed to read the source code of Python]

>  - Where are object.__reduce__ and object.__reduce_ex__ defined, and how
> does copy_reg._reduce_ex fit into the picture? 

See

http://docs.python.org/lib/node69.html


> PEP 307 states that the
> default __reduce__ implementation for new-style classes implemented in
> Python is copy_reg._reduce. However, in  Python 2.4.3 dir(copy_reg)
> indicates that it has no _reduce method.

Yes, it calls copy_reg._reduce_ex now (which also expects the protocol
version)

>  - When the optional constructor argument is passed to copy_reg.pickle,
> where is it stored and how is it used by pickle?

It's not used anymore. A comment says

    # The constructor_ob function is a vestige of safe for unpickling.
    # There is no reason for the caller to pass it anymore.

>  - What does copy_reg.constructor() do?

It does this:

def constructor(object):
    if not callable(object):
        raise TypeError("constructors must be callable")

Regards,
Martin


More information about the Python-Dev mailing list