summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRodrigo Oliveira <mdkcore@qtrnn.io>2024-07-19 14:47:10 (GMT)
committerGitHub <noreply@github.com>2024-07-19 14:47:10 (GMT)
commitd66b06107b0104af513f664d9a5763216639018b (patch)
tree0d685141aab96a59814a4c9acbe455649d215a3b
parenta1df1b44394784721239615f307b273455536d14 (diff)
downloadcpython-d66b06107b0104af513f664d9a5763216639018b.zip
cpython-d66b06107b0104af513f664d9a5763216639018b.tar.gz
cpython-d66b06107b0104af513f664d9a5763216639018b.tar.bz2
gh-118830: Bump pickle.DEFAULT_PROTOCOL to 5 (GH-119340)
-rw-r--r--Doc/library/pickle.rst17
-rw-r--r--Doc/whatsnew/3.14.rst7
-rw-r--r--Lib/pickle.py6
-rw-r--r--Misc/NEWS.d/next/Library/2024-05-21-23-39-22.gh-issue-118830.YTqvEo.rst1
-rw-r--r--Modules/_pickle.c14
-rw-r--r--Modules/clinic/_pickle.c.h8
6 files changed, 33 insertions, 20 deletions
diff --git a/Doc/library/pickle.rst b/Doc/library/pickle.rst
index 57fbe5b..71fe374 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 777faaf..21eb7c3 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 d719ceb..115bd89 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -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
index 0000000..d064998
--- /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 4a2191d..7eebe92 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 693c7d5..40f1309 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 @@ skip_optional_kwonly:
exit:
return return_value;
}
-/*[clinic end generated code: output=c7dd60d20ee4895f input=a9049054013a1b77]*/
+/*[clinic end generated code: output=a9452cf1219f2e7a input=a9049054013a1b77]*/