* Protocol version 4 was added in Python 3.4. It adds support for very large
objects, pickling more kinds of objects, and some data format
- optimizations. It is the default protocol starting with Python 3.8.
+ optimizations. This was the default protocol in Python 3.8--3.13.
Refer to :pep:`3154` for information about improvements brought by
protocol 4.
* Protocol version 5 was added in Python 3.8. It adds support for out-of-band
- data and speedup for in-band data. Refer to :pep:`574` for information about
- improvements brought by protocol 5.
+ data and speedup for in-band data. It is the default protocol starting with
+ Python 3.14. Refer to :pep:`574` for information about improvements brought
+ by protocol 5.
.. note::
Serialization is a more primitive notion than persistence; although
An integer, the default :ref:`protocol version <pickle-protocols>` used
for pickling. May be less than :data:`HIGHEST_PROTOCOL`. Currently the
- default protocol is 4, first introduced in Python 3.4 and incompatible
- with previous versions.
+ default protocol is 5, introduced in Python 3.8 and incompatible
+ with previous versions. This version introduces support for out-of-band
+ buffers, where :pep:`3118`-compatible data can be transmitted separately
+ from the main pickle stream.
.. versionchanged:: 3.0
The default protocol is 4.
+ .. versionchanged:: 3.14
+
+ The default protocol is 5.
+
The :mod:`pickle` module provides the following functions to make the pickling
process more convenient:
(Contributed by Bénédikt Tran in :gh:`120029`.)
+pickle
+------
+
+* Set the default protocol version on the :mod:`pickle` module to 5.
+ For more details, please see :ref:`pickle protocols <pickle-protocols>`.
+
Optimizations
=============
-
Deprecated
==========
bytes_types = (bytes, bytearray)
# These are purely informational; no code uses these.
-format_version = "4.0" # File format version we write
+format_version = "5.0" # File format version we write
compatible_formats = ["1.0", # Original protocol 0
"1.1", # Protocol 0 with INST added
"1.2", # Original protocol 1
# The protocol we write by default. May be less than HIGHEST_PROTOCOL.
# Only bump this if the oldest still supported version of Python already
# includes it.
-DEFAULT_PROTOCOL = 4
+DEFAULT_PROTOCOL = 5
class PickleError(Exception):
"""A common base class for the other pickling exceptions."""
The optional *protocol* argument tells the pickler to use the
given protocol; supported protocols are 0, 1, 2, 3, 4 and 5.
- The default protocol is 4. It was introduced in Python 3.4, and
+ The default protocol is 5. It was introduced in Python 3.8, and
is incompatible with previous versions.
Specifying a negative protocol version selects the highest
--- /dev/null
+Bump :mod:`pickle` default protocol to ``5``.
already includes it. */
enum {
HIGHEST_PROTOCOL = 5,
- DEFAULT_PROTOCOL = 4
+ DEFAULT_PROTOCOL = 5
};
#ifdef MS_WINDOWS
The optional *protocol* argument tells the pickler to use the given
protocol; supported protocols are 0, 1, 2, 3, 4 and 5. The default
-protocol is 4. It was introduced in Python 3.4, and is incompatible
+protocol is 5. It was introduced in Python 3.8, and is incompatible
with previous versions.
Specifying a negative protocol version selects the highest protocol
_pickle_Pickler___init___impl(PicklerObject *self, PyObject *file,
PyObject *protocol, int fix_imports,
PyObject *buffer_callback)
-/*[clinic end generated code: output=0abedc50590d259b input=a7c969699bf5dad3]*/
+/*[clinic end generated code: output=0abedc50590d259b input=cddc50f66b770002]*/
{
/* In case of multiple __init__() calls, clear previous content. */
if (self->write != NULL)
The optional *protocol* argument tells the pickler to use the given
protocol; supported protocols are 0, 1, 2, 3, 4 and 5. The default
-protocol is 4. It was introduced in Python 3.4, and is incompatible
+protocol is 5. It was introduced in Python 3.8, and is incompatible
with previous versions.
Specifying a negative protocol version selects the highest protocol
_pickle_dump_impl(PyObject *module, PyObject *obj, PyObject *file,
PyObject *protocol, int fix_imports,
PyObject *buffer_callback)
-/*[clinic end generated code: output=706186dba996490c input=5ed6653da99cd97c]*/
+/*[clinic end generated code: output=706186dba996490c input=b89ce8d0e911fd46]*/
{
PickleState *state = _Pickle_GetState(module);
PicklerObject *pickler = _Pickler_New(state);
The optional *protocol* argument tells the pickler to use the given
protocol; supported protocols are 0, 1, 2, 3, 4 and 5. The default
-protocol is 4. It was introduced in Python 3.4, and is incompatible
+protocol is 5. It was introduced in Python 3.8, and is incompatible
with previous versions.
Specifying a negative protocol version selects the highest protocol
static PyObject *
_pickle_dumps_impl(PyObject *module, PyObject *obj, PyObject *protocol,
int fix_imports, PyObject *buffer_callback)
-/*[clinic end generated code: output=fbab0093a5580fdf input=e543272436c6f987]*/
+/*[clinic end generated code: output=fbab0093a5580fdf input=139fc546886c63ac]*/
{
PyObject *result;
PickleState *state = _Pickle_GetState(module);
"\n"
"The optional *protocol* argument tells the pickler to use the given\n"
"protocol; supported protocols are 0, 1, 2, 3, 4 and 5. The default\n"
-"protocol is 4. It was introduced in Python 3.4, and is incompatible\n"
+"protocol is 5. It was introduced in Python 3.8, and is incompatible\n"
"with previous versions.\n"
"\n"
"Specifying a negative protocol version selects the highest protocol\n"
"\n"
"The optional *protocol* argument tells the pickler to use the given\n"
"protocol; supported protocols are 0, 1, 2, 3, 4 and 5. The default\n"
-"protocol is 4. It was introduced in Python 3.4, and is incompatible\n"
+"protocol is 5. It was introduced in Python 3.8, and is incompatible\n"
"with previous versions.\n"
"\n"
"Specifying a negative protocol version selects the highest protocol\n"
"\n"
"The optional *protocol* argument tells the pickler to use the given\n"
"protocol; supported protocols are 0, 1, 2, 3, 4 and 5. The default\n"
-"protocol is 4. It was introduced in Python 3.4, and is incompatible\n"
+"protocol is 5. It was introduced in Python 3.8, and is incompatible\n"
"with previous versions.\n"
"\n"
"Specifying a negative protocol version selects the highest protocol\n"
exit:
return return_value;
}
-/*[clinic end generated code: output=c7dd60d20ee4895f input=a9049054013a1b77]*/
+/*[clinic end generated code: output=a9452cf1219f2e7a input=a9049054013a1b77]*/