Issue 47206: pickle docs are wrong about nested classes (original) (raw)

https://docs.python.org/3.10/library/pickle.html#what-can-be-pickled-and-unpickled says that only "classes that are defined at the top level of a module" can be pickled. But in fact these work fine in current Python, probably since 3.3 when qualname was added (https://docs.python.org/3/library/stdtypes.html#definition.qualname). Similarly, the docs claim only top-level functions can be pickled, but in fact methods nested in classes work fine.

Example script demonstrating that these work:

import pickle

class X: class Y: pass

def method(self):
    pass

print(pickle.dumps(X.Y)) print(pickle.loads(pickle.dumps(X.Y)))

print(pickle.dumps(X.Y())) print(pickle.loads(pickle.dumps(X.Y())))

print(pickle.dumps(X.method)) print(pickle.loads(pickle.dumps(X.method)))