From: Andrew M. Kuchling Date: Fri, 21 Mar 2003 18:32:43 +0000 (+0000) Subject: Add PEP 307 section X-Git-Tag: v2.3c1~1396 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a092ba1adcf35282cb0bc354217505c5cdae19d2;p=python Add PEP 307 section --- diff --git a/Doc/whatsnew/whatsnew23.tex b/Doc/whatsnew/whatsnew23.tex index 4a2b18fb53..5019d33409 100644 --- a/Doc/whatsnew/whatsnew23.tex +++ b/Doc/whatsnew/whatsnew23.tex @@ -883,6 +883,50 @@ by Kevin Altis, Dave Cole, Andrew McNamara, Skip Montanaro, Cliff Wells. \end{seealso} +%====================================================================== +\section{PEP 307: Pickle Enhancements \label{section-pep305}} + +The \module{pickle} and \module{cPickle} modules received some +attention during the 2.3 development cycle. In 2.2, new-style classes +could be pickled without difficult, but they weren't pickled very +compactly; \pep{307} quotes a trivial example where a new-style class +results in a pickled string three times longer than that for a classic +class. + +The solution was to invent a new pickle protocol. The +\function{pickle.dumps()} function has supported a text-or-binary flag +for a long time. In 2.3, this flag is redefined from a Boolean to an +integer; 0 is the old text-mode pickle format, 1 is the old binary +format, and now 2 is a new 2.3-specific format. (A new constant, +\constant{pickle.HIGHEST_PROTOCOL}, can be used to select the fanciest +protocol available.) + +Unpickling is no longer considered a safe operation. 2.2's +\module{pickle} provided hooks for trying to prevent unsafe classes +from being unpickled (specifically, a +\member{__safe_for_unpickling__} attribute), but none of this code +was ever audited and therefore it's all been ripped out in 2.3. You +should not unpickle untrusted data in any version of Python. + +To reduce the pickling overhead for new-style classes, a new interface +for customizing pickling was added using three special methods: +\method{__getstate__}, \method{__setstate__}, and +\method{__getnewargs__}. Consult \pep{307} for the full semantics +of these methods. + +As a way to compress pickles yet further, it's now possible to use +integer codes instead of long strings to identify pickled classes. +The Python Software Foundation will maintain a list of standardized +codes; there's also a range of codes for private use. Currently no +codes have been specified. + +\begin{seealso} + +\seepep{307}{Extensions to the pickle protocol}{Written and implemented +by Guido van Rossum and Tim Peters.} + +\end{seealso} + %====================================================================== \section{Extended Slices\label{section-slices}}