copyreg — Register pickle and copy support functions¶
Source code: Lib/copyreg.py
The copyreg module offers a way to define functions
used while pickling and copying specific objects.
The pickle and copy modules use those functions
when pickling/copying those objects.
The module provides configuration information
about object constructors which are not classes.
Such constructors may be factory functions or class instances.
- copyreg.constructor(object)¶
Declares object to be a valid constructor. If object is not callable (and hence not valid as a constructor), raises
TypeError.
- copyreg.pickle(type, function, constructor_ob=None)¶
Declares that function should be used as a “reduction” function for objects of type type. function must return either a string or a tuple containing between two and six elements. See the
dispatch_tablefor more details on the interface of function.The constructor_ob parameter is a legacy feature and is now ignored, but if passed it must be a callable.
Note that the
dispatch_tableattribute of a pickler object or subclass ofpickle.Picklercan also be used for declaring reduction functions.
- copyreg.copy(type, function)¶
Declares that function should be used as the shallow copy function for objects of type type. function is called with the object as its only argument and must return the copy, like the
__copy__()method. Registration is by exact type: it does not apply to subclasses of type.copy.copy()uses the registered function in preference to the__copy__()method and the pickle interfaces. Unlike a reduction function registered withpickle(), it affects only shallow copying. The registered functions are stored incopy_dispatch_table, the same table that holds the handlers for the built-in container types, so registering a function for a built-in container type overrides its default copying.Added in version 3.16.0a0 (unreleased).
- copyreg.deepcopy(type, function)¶
Like
copy(), but registers the deep copy function used bycopy.deepcopy(). function is called with the object and the memo dictionary as its two arguments, like the__deepcopy__()method. The registered functions are stored indeepcopy_dispatch_table.Added in version 3.16.0a0 (unreleased).
Example¶
The example below would like to show how to register a pickle function and how it will be used:
>>> import copyreg, copy, pickle
>>> class C:
... def __init__(self, a):
... self.a = a
...
>>> def pickle_c(c):
... print("pickling a C instance...")
... return C, (c.a,)
...
>>> copyreg.pickle(C, pickle_c)
>>> c = C(1)
>>> d = copy.copy(c)
pickling a C instance...
>>> p = pickle.dumps(c)
pickling a C instance...