https://github.com/python/cpython/commit/d66b06107b0104af513f664d9a5763216639018b
commit: d66b06107b0104af513f664d9a5763216639018b
branch: main
author: Rodrigo Oliveira <[email protected]>
committer: encukou <[email protected]>
date: 2024-07-19T16:47:10+02:00
summary:

gh-118830: Bump pickle.DEFAULT_PROTOCOL to 5 (GH-119340)

files:
A Misc/NEWS.d/next/Library/2024-05-21-23-39-22.gh-issue-118830.YTqvEo.rst
M Doc/library/pickle.rst
M Doc/whatsnew/3.14.rst
M Lib/pickle.py
M Modules/_pickle.c
M Modules/clinic/_pickle.c.h

diff --git a/Doc/library/pickle.rst b/Doc/library/pickle.rst
index 57fbe5b6ece6b6..71fe3743c5968d 100644
--- a/Doc/library/pickle.rst
+++ b/Doc/library/pickle.rst
@@ -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:
 
diff --git a/Doc/whatsnew/3.14.rst b/Doc/whatsnew/3.14.rst
index 777faafe59b4f5..21eb7c3e6efa4a 100644
--- a/Doc/whatsnew/3.14.rst
+++ b/Doc/whatsnew/3.14.rst
@@ -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
 ==========
 
diff --git a/Lib/pickle.py b/Lib/pickle.py
index d719ceb7a0b8e8..115bd893ca1a38 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -51,7 +51,7 @@
 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 @@
 # 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 @@ def __init__(self, file, protocol=None, *, fix_imports=True,
 
         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
index 00000000000000..d06499831dc009
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-05-21-23-39-22.gh-issue-118830.YTqvEo.rst
@@ -0,0 +1 @@
+Bump :mod:`pickle` default protocol to ``5``.
diff --git a/Modules/_pickle.c b/Modules/_pickle.c
index 4a2191db0cf984..7eebe922c93ca1 100644
--- a/Modules/_pickle.c
+++ b/Modules/_pickle.c
@@ -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);
diff --git a/Modules/clinic/_pickle.c.h b/Modules/clinic/_pickle.c.h
index 693c7d59e9d7a6..40f1309b6aa03c 100644
--- a/Modules/clinic/_pickle.c.h
+++ b/Modules/clinic/_pickle.c.h
@@ -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 @@ _pickle_loads(PyObject *module, PyObject *const *args, 
Py_ssize_t nargs, PyObjec
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=c7dd60d20ee4895f input=a9049054013a1b77]*/
+/*[clinic end generated code: output=a9452cf1219f2e7a input=a9049054013a1b77]*/

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to