]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-118830: Bump pickle.DEFAULT_PROTOCOL to 5 (GH-119340)
authorRodrigo Oliveira <mdkcore@qtrnn.io>
Fri, 19 Jul 2024 14:47:10 +0000 (14:47 +0000)
committerGitHub <noreply@github.com>
Fri, 19 Jul 2024 14:47:10 +0000 (16:47 +0200)
Doc/library/pickle.rst
Doc/whatsnew/3.14.rst
Lib/pickle.py
Misc/NEWS.d/next/Library/2024-05-21-23-39-22.gh-issue-118830.YTqvEo.rst [new file with mode: 0644]
Modules/_pickle.c
Modules/clinic/_pickle.c.h

index 57fbe5b6ece6b6ccd25be590ff8fd79bb106b8a0..71fe3743c5968d306a3443084a2592436c3aabae 100644 (file)
@@ -156,13 +156,14 @@ to read the pickle produced.
 
 * 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
@@ -199,8 +200,10 @@ The :mod:`pickle` module provides the following constants:
 
    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
 
@@ -210,6 +213,10 @@ The :mod:`pickle` module provides the following constants:
 
       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:
 
index 777faafe59b4f5fb501a2661b5739a3c23b440ad..21eb7c3e6efa4a0e49bf7ba3e271db218419d4d7 100644 (file)
@@ -146,6 +146,12 @@ symtable
 
   (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
 =============
@@ -160,7 +166,6 @@ asyncio
 
 
 
-
 Deprecated
 ==========
 
index d719ceb7a0b8e883250b1cd186ec8a01672a3522..115bd893ca1a3851f8984d149aa528cb378d8b67 100644 (file)
@@ -51,7 +51,7 @@ except ImportError:
 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
@@ -68,7 +68,7 @@ HIGHEST_PROTOCOL = 5
 # 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."""
@@ -408,7 +408,7 @@ class _Pickler:
 
         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
diff --git a/Misc/NEWS.d/next/Library/2024-05-21-23-39-22.gh-issue-118830.YTqvEo.rst b/Misc/NEWS.d/next/Library/2024-05-21-23-39-22.gh-issue-118830.YTqvEo.rst
new file mode 100644 (file)
index 0000000..d064998
--- /dev/null
@@ -0,0 +1 @@
+Bump :mod:`pickle` default protocol to ``5``.
index 4a2191db0cf984a05b4e500ab3cd74bb837f1dd6..7eebe922c93ca189c9acc63524a031b9b8a636eb 100644 (file)
@@ -40,7 +40,7 @@ class _pickle.UnpicklerMemoProxy "UnpicklerMemoProxyObject *" ""
    already includes it. */
 enum {
     HIGHEST_PROTOCOL = 5,
-    DEFAULT_PROTOCOL = 4
+    DEFAULT_PROTOCOL = 5
 };
 
 #ifdef MS_WINDOWS
@@ -4692,7 +4692,7 @@ This takes a binary file for writing a pickle data stream.
 
 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
@@ -4725,7 +4725,7 @@ static int
 _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)
@@ -7507,7 +7507,7 @@ be more efficient.
 
 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
@@ -7533,7 +7533,7 @@ static PyObject *
 _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);
@@ -7578,7 +7578,7 @@ Return the pickled representation of the object as a bytes object.
 
 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
@@ -7598,7 +7598,7 @@ into *file* as part of the pickle stream.  It is an error if
 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);
index 693c7d59e9d7a61a2a9bf411b066900659a6c5d2..40f1309b6aa03c343b9b456ccf959a38c5c7e0cd 100644 (file)
@@ -111,7 +111,7 @@ PyDoc_STRVAR(_pickle_Pickler___init____doc__,
 "\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"
@@ -614,7 +614,7 @@ PyDoc_STRVAR(_pickle_dump__doc__,
 "\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"
@@ -724,7 +724,7 @@ PyDoc_STRVAR(_pickle_dumps__doc__,
 "\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"
@@ -1077,4 +1077,4 @@ skip_optional_kwonly:
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=c7dd60d20ee4895f input=a9049054013a1b77]*/
+/*[clinic end generated code: output=a9452cf1219f2e7a input=a9049054013a1b77]*/