[Python-Dev] Why is pickle.DEFAULT_PROTOCOL still 3?

Serhiy Storchaka storchaka at gmail.com
Tue Apr 3 04:18:21 EDT 2018


03.04.18 01:57, Lukasz Langa пише:
>> On Apr 2, 2018, at 2:13 PM, Antoine Pitrou <solipsis at pitrou.net> wrote:
>> On Mon, 2 Apr 2018 13:48:46 -0700
>> Lukasz Langa <lukasz at langa.pl> wrote:
>>> Pickle protocol version 4.0 was originally defined back in PEP 3154 and shipped as part of Python 3.4 back in 2011. Yet it's still not the default.
>> Because we want pickles produced with the default to be readable by
>> earlier Python 3 versions.
>> (the same reason protocol 0 stayed the default throughout the Python 2
>> lifetime)
> 
> Alright, so that means we can easily do this for Python 3.8, right? I mean, following Christian's logic, Python 3.3 is already dead, with its final release done in February 2016 and support dropped in September 2017 per PEP 398.
> 
> I think we need to get past thinking about "Python 2" vs. "Python 3". This frame of mind creates space for another mythical release of Python that will break all the compatibilities, something we promised not to do. A moving backward compatibility window that includes the last release still under security fixes seems like a good new framework for this.
> 
> What do you think?

The only possible drawback of protocol 4 is that very short pickles can 
be longer than with protocol 3 due to additional 9 bytes for the FRAME 
header and less compact pickling of globals.

This may be partially compensated by implementing additional 
optimizations and/or passing short pickles through pickletools.optimize().



More information about the Python-Dev mailing list