Python 3 - Pickle

Updated: 2021-11-19

The data format used by pickle is Python-specific.

  • Pros: there are no restrictions imposed by external standards
  • Cons: it means that non-Python programs may not be able to reconstruct pickled Python objects.

There are fundamental differences between the pickle protocols and JSON (JavaScript Object Notation):

  • JSON is a text serialization format (it outputs unicode text, although most of the time it is then encoded to utf-8), while pickle is a binary serialization format;
  • JSON is human-readable, while pickle is not;
  • JSON is interoperable and widely used outside of the Python ecosystem, while pickle is Python-specific;
  • JSON, by default, can only represent a subset of the Python built-in types, and no custom classes; pickle can represent an extremely large number of Python types (many of them automatically, by clever usage of Python’s introspection facilities; complex cases can be tackled by implementing specific object APIs).

“serialization”, “marshalling,” or “flattening” “Pickling” is the process whereby a Python object hierarchy is converted into a byte stream, and “unpickling” is the inverse operation, whereby a byte stream (from a binary file or bytes-like object) is converted back into an object hierarchy.

The marshal serialization format is not guaranteed to be portable across Python versions. Because its primary job in life is to support .pyc files,