blob: 1b85bfadda55630d2d80271d7388e48956a65e5f [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`pickle` --- Python object serialization
2=============================================
3
4.. index::
5 single: persistence
6 pair: persistent; objects
7 pair: serializing; objects
8 pair: marshalling; objects
9 pair: flattening; objects
10 pair: pickling; objects
11
12.. module:: pickle
13 :synopsis: Convert Python objects to streams of bytes and back.
Christian Heimes5b5e81c2007-12-31 16:14:33 +000014.. sectionauthor:: Jim Kerr <jbkerr@sr.hp.com>.
15.. sectionauthor:: Barry Warsaw <barry@zope.com>
Georg Brandl116aa622007-08-15 14:28:22 +000016
Alexandre Vassalotti9d7665d2009-04-03 06:13:29 +000017
Georg Brandl116aa622007-08-15 14:28:22 +000018The :mod:`pickle` module implements a fundamental, but powerful algorithm for
19serializing and de-serializing a Python object structure. "Pickling" is the
20process whereby a Python object hierarchy is converted into a byte stream, and
21"unpickling" is the inverse operation, whereby a byte stream is converted back
22into an object hierarchy. Pickling (and unpickling) is alternatively known as
23"serialization", "marshalling," [#]_ or "flattening", however, to avoid
Benjamin Petersonbe149d02008-06-20 21:03:22 +000024confusion, the terms used here are "pickling" and "unpickling"..
Georg Brandl116aa622007-08-15 14:28:22 +000025
Georg Brandl0036bcf2010-10-17 10:24:54 +000026.. warning::
27
28 The :mod:`pickle` module is not intended to be secure against erroneous or
29 maliciously constructed data. Never unpickle data received from an untrusted
30 or unauthenticated source.
31
Georg Brandl116aa622007-08-15 14:28:22 +000032
33Relationship to other Python modules
34------------------------------------
35
Benjamin Petersonbe149d02008-06-20 21:03:22 +000036The :mod:`pickle` module has an transparent optimizer (:mod:`_pickle`) written
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +000037in C. It is used whenever available. Otherwise the pure Python implementation is
Benjamin Petersonbe149d02008-06-20 21:03:22 +000038used.
Georg Brandl116aa622007-08-15 14:28:22 +000039
40Python has a more primitive serialization module called :mod:`marshal`, but in
41general :mod:`pickle` should always be the preferred way to serialize Python
42objects. :mod:`marshal` exists primarily to support Python's :file:`.pyc`
43files.
44
Georg Brandl5aa580f2010-11-30 14:57:54 +000045The :mod:`pickle` module differs from :mod:`marshal` in several significant ways:
Georg Brandl116aa622007-08-15 14:28:22 +000046
47* The :mod:`pickle` module keeps track of the objects it has already serialized,
48 so that later references to the same object won't be serialized again.
49 :mod:`marshal` doesn't do this.
50
51 This has implications both for recursive objects and object sharing. Recursive
52 objects are objects that contain references to themselves. These are not
53 handled by marshal, and in fact, attempting to marshal recursive objects will
54 crash your Python interpreter. Object sharing happens when there are multiple
55 references to the same object in different places in the object hierarchy being
56 serialized. :mod:`pickle` stores such objects only once, and ensures that all
57 other references point to the master copy. Shared objects remain shared, which
58 can be very important for mutable objects.
59
60* :mod:`marshal` cannot be used to serialize user-defined classes and their
61 instances. :mod:`pickle` can save and restore class instances transparently,
62 however the class definition must be importable and live in the same module as
63 when the object was stored.
64
65* The :mod:`marshal` serialization format is not guaranteed to be portable
66 across Python versions. Because its primary job in life is to support
67 :file:`.pyc` files, the Python implementers reserve the right to change the
68 serialization format in non-backwards compatible ways should the need arise.
69 The :mod:`pickle` serialization format is guaranteed to be backwards compatible
70 across Python releases.
71
Georg Brandl116aa622007-08-15 14:28:22 +000072Note that serialization is a more primitive notion than persistence; although
73:mod:`pickle` reads and writes file objects, it does not handle the issue of
74naming persistent objects, nor the (even more complicated) issue of concurrent
75access to persistent objects. The :mod:`pickle` module can transform a complex
76object into a byte stream and it can transform the byte stream into an object
77with the same internal structure. Perhaps the most obvious thing to do with
78these byte streams is to write them onto a file, but it is also conceivable to
79send them across a network or store them in a database. The module
80:mod:`shelve` provides a simple interface to pickle and unpickle objects on
81DBM-style database files.
82
83
84Data stream format
85------------------
86
87.. index::
88 single: XDR
89 single: External Data Representation
90
91The data format used by :mod:`pickle` is Python-specific. This has the
92advantage that there are no restrictions imposed by external standards such as
93XDR (which can't represent pointer sharing); however it means that non-Python
94programs may not be able to reconstruct pickled Python objects.
95
Alexandre Vassalotti758bca62008-10-18 19:25:07 +000096By default, the :mod:`pickle` data format uses a compact binary representation.
97The module :mod:`pickletools` contains tools for analyzing data streams
98generated by :mod:`pickle`.
Georg Brandl116aa622007-08-15 14:28:22 +000099
Georg Brandl42f2ae02008-04-06 08:39:37 +0000100There are currently 4 different protocols which can be used for pickling.
Georg Brandl116aa622007-08-15 14:28:22 +0000101
Alexandre Vassalottif7d08c72009-01-23 04:50:05 +0000102* Protocol version 0 is the original human-readable protocol and is
103 backwards compatible with earlier versions of Python.
Georg Brandl116aa622007-08-15 14:28:22 +0000104
105* Protocol version 1 is the old binary format which is also compatible with
106 earlier versions of Python.
107
108* Protocol version 2 was introduced in Python 2.3. It provides much more
Georg Brandl9afde1c2007-11-01 20:32:30 +0000109 efficient pickling of :term:`new-style class`\es.
Georg Brandl116aa622007-08-15 14:28:22 +0000110
Georg Brandl42f2ae02008-04-06 08:39:37 +0000111* Protocol version 3 was added in Python 3.0. It has explicit support for
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000112 bytes and cannot be unpickled by Python 2.x pickle modules. This is
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000113 the current recommended protocol, use it whenever it is possible.
Georg Brandl42f2ae02008-04-06 08:39:37 +0000114
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000115Refer to :pep:`307` for information about improvements brought by
116protocol 2. See :mod:`pickletools`'s source code for extensive
117comments about opcodes used by pickle protocols.
Georg Brandl116aa622007-08-15 14:28:22 +0000118
Georg Brandl116aa622007-08-15 14:28:22 +0000119
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000120Module Interface
121----------------
Georg Brandl116aa622007-08-15 14:28:22 +0000122
123To serialize an object hierarchy, you first create a pickler, then you call the
124pickler's :meth:`dump` method. To de-serialize a data stream, you first create
125an unpickler, then you call the unpickler's :meth:`load` method. The
126:mod:`pickle` module provides the following constant:
127
128
129.. data:: HIGHEST_PROTOCOL
130
131 The highest protocol version available. This value can be passed as a
132 *protocol* value.
133
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000134.. data:: DEFAULT_PROTOCOL
135
136 The default protocol used for pickling. May be less than HIGHEST_PROTOCOL.
137 Currently the default protocol is 3; a backward-incompatible protocol
138 designed for Python 3.0.
139
140
Georg Brandl116aa622007-08-15 14:28:22 +0000141The :mod:`pickle` module provides the following functions to make the pickling
142process more convenient:
143
Georg Brandl18244152009-09-02 20:34:52 +0000144.. function:: dump(obj, file, protocol=None, \*, fix_imports=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000145
Antoine Pitrou11cb9612010-09-15 11:11:28 +0000146 Write a pickled representation of *obj* to the open :term:`file object` *file*.
147 This is equivalent to ``Pickler(file, protocol).dump(obj)``.
Georg Brandl116aa622007-08-15 14:28:22 +0000148
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000149 The optional *protocol* argument tells the pickler to use the given protocol;
150 supported protocols are 0, 1, 2, 3. The default protocol is 3; a
151 backward-incompatible protocol designed for Python 3.0.
Georg Brandl116aa622007-08-15 14:28:22 +0000152
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000153 Specifying a negative protocol version selects the highest protocol version
154 supported. The higher the protocol used, the more recent the version of
155 Python needed to read the pickle produced.
Georg Brandl116aa622007-08-15 14:28:22 +0000156
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000157 The *file* argument must have a write() method that accepts a single bytes
Antoine Pitrou11cb9612010-09-15 11:11:28 +0000158 argument. It can thus be an on-disk file opened for binary writing, a
159 :class:`io.BytesIO` instance, or any other custom object that meets this
160 interface.
Georg Brandl116aa622007-08-15 14:28:22 +0000161
Antoine Pitroud9dfaa92009-06-04 20:32:06 +0000162 If *fix_imports* is True and *protocol* is less than 3, pickle will try to
163 map the new Python 3.x names to the old module names used in Python 2.x,
164 so that the pickle data stream is readable with Python 2.x.
165
Georg Brandl18244152009-09-02 20:34:52 +0000166.. function:: dumps(obj, protocol=None, \*, fix_imports=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000167
Mark Summerfieldb9e23042008-04-21 14:47:45 +0000168 Return the pickled representation of the object as a :class:`bytes`
169 object, instead of writing it to a file.
Georg Brandl116aa622007-08-15 14:28:22 +0000170
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000171 The optional *protocol* argument tells the pickler to use the given protocol;
172 supported protocols are 0, 1, 2, 3. The default protocol is 3; a
173 backward-incompatible protocol designed for Python 3.0.
174
175 Specifying a negative protocol version selects the highest protocol version
176 supported. The higher the protocol used, the more recent the version of
177 Python needed to read the pickle produced.
178
Antoine Pitroud9dfaa92009-06-04 20:32:06 +0000179 If *fix_imports* is True and *protocol* is less than 3, pickle will try to
180 map the new Python 3.x names to the old module names used in Python 2.x,
181 so that the pickle data stream is readable with Python 2.x.
182
Georg Brandl18244152009-09-02 20:34:52 +0000183.. function:: load(file, \*, fix_imports=True, encoding="ASCII", errors="strict")
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000184
Antoine Pitrou11cb9612010-09-15 11:11:28 +0000185 Read a pickled object representation from the open :term:`file object` *file*
186 and return the reconstituted object hierarchy specified therein. This is
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000187 equivalent to ``Unpickler(file).load()``.
188
189 The protocol version of the pickle is detected automatically, so no protocol
190 argument is needed. Bytes past the pickled object's representation are
191 ignored.
192
193 The argument *file* must have two methods, a read() method that takes an
194 integer argument, and a readline() method that requires no arguments. Both
Antoine Pitrou11cb9612010-09-15 11:11:28 +0000195 methods should return bytes. Thus *file* can be an on-disk file opened
196 for binary reading, a :class:`io.BytesIO` object, or any other custom object
197 that meets this interface.
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000198
Antoine Pitroud9dfaa92009-06-04 20:32:06 +0000199 Optional keyword arguments are *fix_imports*, *encoding* and *errors*,
Georg Brandl6faee4e2010-09-21 14:48:28 +0000200 which are used to control compatibility support for pickle stream generated
Antoine Pitroud9dfaa92009-06-04 20:32:06 +0000201 by Python 2.x. If *fix_imports* is True, pickle will try to map the old
202 Python 2.x names to the new names used in Python 3.x. The *encoding* and
203 *errors* tell pickle how to decode 8-bit string instances pickled by Python
204 2.x; these default to 'ASCII' and 'strict', respectively.
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000205
Georg Brandl18244152009-09-02 20:34:52 +0000206.. function:: loads(bytes_object, \*, fix_imports=True, encoding="ASCII", errors="strict")
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000207
208 Read a pickled object hierarchy from a :class:`bytes` object and return the
209 reconstituted object hierarchy specified therein
210
211 The protocol version of the pickle is detected automatically, so no protocol
212 argument is needed. Bytes past the pickled object's representation are
213 ignored.
214
Antoine Pitroud9dfaa92009-06-04 20:32:06 +0000215 Optional keyword arguments are *fix_imports*, *encoding* and *errors*,
Georg Brandl6faee4e2010-09-21 14:48:28 +0000216 which are used to control compatibility support for pickle stream generated
Antoine Pitroud9dfaa92009-06-04 20:32:06 +0000217 by Python 2.x. If *fix_imports* is True, pickle will try to map the old
218 Python 2.x names to the new names used in Python 3.x. The *encoding* and
219 *errors* tell pickle how to decode 8-bit string instances pickled by Python
220 2.x; these default to 'ASCII' and 'strict', respectively.
Georg Brandl116aa622007-08-15 14:28:22 +0000221
Georg Brandl116aa622007-08-15 14:28:22 +0000222
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000223The :mod:`pickle` module defines three exceptions:
Georg Brandl116aa622007-08-15 14:28:22 +0000224
225.. exception:: PickleError
226
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000227 Common base class for the other pickling exceptions. It inherits
Georg Brandl116aa622007-08-15 14:28:22 +0000228 :exc:`Exception`.
229
Georg Brandl116aa622007-08-15 14:28:22 +0000230.. exception:: PicklingError
231
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000232 Error raised when an unpicklable object is encountered by :class:`Pickler`.
233 It inherits :exc:`PickleError`.
Georg Brandl116aa622007-08-15 14:28:22 +0000234
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000235 Refer to :ref:`pickle-picklable` to learn what kinds of objects can be
236 pickled.
237
Georg Brandl116aa622007-08-15 14:28:22 +0000238.. exception:: UnpicklingError
239
Ezio Melottie62aad32011-11-18 13:51:10 +0200240 Error raised when there is a problem unpickling an object, such as a data
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000241 corruption or a security violation. It inherits :exc:`PickleError`.
Georg Brandl116aa622007-08-15 14:28:22 +0000242
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000243 Note that other exceptions may also be raised during unpickling, including
244 (but not necessarily limited to) AttributeError, EOFError, ImportError, and
245 IndexError.
246
247
248The :mod:`pickle` module exports two classes, :class:`Pickler` and
Georg Brandl116aa622007-08-15 14:28:22 +0000249:class:`Unpickler`:
250
Georg Brandl18244152009-09-02 20:34:52 +0000251.. class:: Pickler(file, protocol=None, \*, fix_imports=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000252
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000253 This takes a binary file for writing a pickle data stream.
Georg Brandl116aa622007-08-15 14:28:22 +0000254
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000255 The optional *protocol* argument tells the pickler to use the given protocol;
256 supported protocols are 0, 1, 2, 3. The default protocol is 3; a
257 backward-incompatible protocol designed for Python 3.0.
Georg Brandl116aa622007-08-15 14:28:22 +0000258
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000259 Specifying a negative protocol version selects the highest protocol version
260 supported. The higher the protocol used, the more recent the version of
261 Python needed to read the pickle produced.
Georg Brandl116aa622007-08-15 14:28:22 +0000262
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000263 The *file* argument must have a write() method that accepts a single bytes
Antoine Pitrou11cb9612010-09-15 11:11:28 +0000264 argument. It can thus be an on-disk file opened for binary writing, a
265 :class:`io.BytesIO` instance, or any other custom object that meets this interface.
Georg Brandl116aa622007-08-15 14:28:22 +0000266
Antoine Pitroud9dfaa92009-06-04 20:32:06 +0000267 If *fix_imports* is True and *protocol* is less than 3, pickle will try to
268 map the new Python 3.x names to the old module names used in Python 2.x,
269 so that the pickle data stream is readable with Python 2.x.
270
Benjamin Petersone41251e2008-04-25 01:59:09 +0000271 .. method:: dump(obj)
Georg Brandl116aa622007-08-15 14:28:22 +0000272
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000273 Write a pickled representation of *obj* to the open file object given in
274 the constructor.
Georg Brandl116aa622007-08-15 14:28:22 +0000275
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000276 .. method:: persistent_id(obj)
277
278 Do nothing by default. This exists so a subclass can override it.
279
280 If :meth:`persistent_id` returns ``None``, *obj* is pickled as usual. Any
281 other value causes :class:`Pickler` to emit the returned value as a
282 persistent ID for *obj*. The meaning of this persistent ID should be
283 defined by :meth:`Unpickler.persistent_load`. Note that the value
284 returned by :meth:`persistent_id` cannot itself have a persistent ID.
285
286 See :ref:`pickle-persistent` for details and examples of uses.
Georg Brandl116aa622007-08-15 14:28:22 +0000287
Antoine Pitrou8d3c2902012-03-04 18:31:48 +0100288 .. attribute:: dispatch_table
289
290 A pickler object's dispatch table is a registry of *reduction
291 functions* of the kind which can be declared using
292 :func:`copyreg.pickle`. It is a mapping whose keys are classes
293 and whose values are reduction functions. A reduction function
294 takes a single argument of the associated class and should
295 conform to the same interface as a :meth:`~object.__reduce__`
296 method.
297
298 By default, a pickler object will not have a
299 :attr:`dispatch_table` attribute, and it will instead use the
300 global dispatch table managed by the :mod:`copyreg` module.
301 However, to customize the pickling for a specific pickler object
302 one can set the :attr:`dispatch_table` attribute to a dict-like
303 object. Alternatively, if a subclass of :class:`Pickler` has a
304 :attr:`dispatch_table` attribute then this will be used as the
305 default dispatch table for instances of that class.
306
307 See :ref:`pickle-dispatch` for usage examples.
308
309 .. versionadded:: 3.3
310
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000311 .. attribute:: fast
312
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000313 Deprecated. Enable fast mode if set to a true value. The fast mode
314 disables the usage of memo, therefore speeding the pickling process by not
315 generating superfluous PUT opcodes. It should not be used with
316 self-referential objects, doing otherwise will cause :class:`Pickler` to
317 recurse infinitely.
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000318
319 Use :func:`pickletools.optimize` if you need more compact pickles.
320
Georg Brandl116aa622007-08-15 14:28:22 +0000321
Georg Brandl18244152009-09-02 20:34:52 +0000322.. class:: Unpickler(file, \*, fix_imports=True, encoding="ASCII", errors="strict")
Georg Brandl116aa622007-08-15 14:28:22 +0000323
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000324 This takes a binary file for reading a pickle data stream.
Georg Brandl116aa622007-08-15 14:28:22 +0000325
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000326 The protocol version of the pickle is detected automatically, so no
327 protocol argument is needed.
328
329 The argument *file* must have two methods, a read() method that takes an
330 integer argument, and a readline() method that requires no arguments. Both
Antoine Pitrou11cb9612010-09-15 11:11:28 +0000331 methods should return bytes. Thus *file* can be an on-disk file object opened
332 for binary reading, a :class:`io.BytesIO` object, or any other custom object
333 that meets this interface.
Georg Brandl116aa622007-08-15 14:28:22 +0000334
Antoine Pitroud9dfaa92009-06-04 20:32:06 +0000335 Optional keyword arguments are *fix_imports*, *encoding* and *errors*,
Georg Brandl6faee4e2010-09-21 14:48:28 +0000336 which are used to control compatibility support for pickle stream generated
Antoine Pitroud9dfaa92009-06-04 20:32:06 +0000337 by Python 2.x. If *fix_imports* is True, pickle will try to map the old
338 Python 2.x names to the new names used in Python 3.x. The *encoding* and
339 *errors* tell pickle how to decode 8-bit string instances pickled by Python
340 2.x; these default to 'ASCII' and 'strict', respectively.
Georg Brandl116aa622007-08-15 14:28:22 +0000341
Benjamin Petersone41251e2008-04-25 01:59:09 +0000342 .. method:: load()
Georg Brandl116aa622007-08-15 14:28:22 +0000343
Benjamin Petersone41251e2008-04-25 01:59:09 +0000344 Read a pickled object representation from the open file object given in
345 the constructor, and return the reconstituted object hierarchy specified
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000346 therein. Bytes past the pickled object's representation are ignored.
Georg Brandl116aa622007-08-15 14:28:22 +0000347
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000348 .. method:: persistent_load(pid)
Georg Brandl116aa622007-08-15 14:28:22 +0000349
Ezio Melottie62aad32011-11-18 13:51:10 +0200350 Raise an :exc:`UnpicklingError` by default.
Georg Brandl116aa622007-08-15 14:28:22 +0000351
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000352 If defined, :meth:`persistent_load` should return the object specified by
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000353 the persistent ID *pid*. If an invalid persistent ID is encountered, an
Ezio Melottie62aad32011-11-18 13:51:10 +0200354 :exc:`UnpicklingError` should be raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000355
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000356 See :ref:`pickle-persistent` for details and examples of uses.
357
358 .. method:: find_class(module, name)
359
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000360 Import *module* if necessary and return the object called *name* from it,
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000361 where the *module* and *name* arguments are :class:`str` objects. Note,
362 unlike its name suggests, :meth:`find_class` is also used for finding
363 functions.
Georg Brandl116aa622007-08-15 14:28:22 +0000364
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000365 Subclasses may override this to gain control over what type of objects and
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000366 how they can be loaded, potentially reducing security risks. Refer to
367 :ref:`pickle-restrict` for details.
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000368
369
370.. _pickle-picklable:
Georg Brandl116aa622007-08-15 14:28:22 +0000371
372What can be pickled and unpickled?
373----------------------------------
374
375The following types can be pickled:
376
377* ``None``, ``True``, and ``False``
378
Georg Brandlba956ae2007-11-29 17:24:34 +0000379* integers, floating point numbers, complex numbers
Georg Brandl116aa622007-08-15 14:28:22 +0000380
Georg Brandlf6945182008-02-01 11:56:49 +0000381* strings, bytes, bytearrays
Georg Brandl116aa622007-08-15 14:28:22 +0000382
383* tuples, lists, sets, and dictionaries containing only picklable objects
384
385* functions defined at the top level of a module
386
387* built-in functions defined at the top level of a module
388
389* classes that are defined at the top level of a module
390
391* instances of such classes whose :attr:`__dict__` or :meth:`__setstate__` is
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000392 picklable (see section :ref:`pickle-inst` for details)
Georg Brandl116aa622007-08-15 14:28:22 +0000393
394Attempts to pickle unpicklable objects will raise the :exc:`PicklingError`
395exception; when this happens, an unspecified number of bytes may have already
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000396been written to the underlying file. Trying to pickle a highly recursive data
Georg Brandl116aa622007-08-15 14:28:22 +0000397structure may exceed the maximum recursion depth, a :exc:`RuntimeError` will be
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000398raised in this case. You can carefully raise this limit with
Georg Brandl116aa622007-08-15 14:28:22 +0000399:func:`sys.setrecursionlimit`.
400
401Note that functions (built-in and user-defined) are pickled by "fully qualified"
402name reference, not by value. This means that only the function name is
Ezio Melottie62aad32011-11-18 13:51:10 +0200403pickled, along with the name of the module the function is defined in. Neither the
Georg Brandl116aa622007-08-15 14:28:22 +0000404function's code, nor any of its function attributes are pickled. Thus the
405defining module must be importable in the unpickling environment, and the module
406must contain the named object, otherwise an exception will be raised. [#]_
407
408Similarly, classes are pickled by named reference, so the same restrictions in
409the unpickling environment apply. Note that none of the class's code or data is
410pickled, so in the following example the class attribute ``attr`` is not
411restored in the unpickling environment::
412
413 class Foo:
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000414 attr = 'A class attribute'
Georg Brandl116aa622007-08-15 14:28:22 +0000415
416 picklestring = pickle.dumps(Foo)
417
418These restrictions are why picklable functions and classes must be defined in
419the top level of a module.
420
421Similarly, when class instances are pickled, their class's code and data are not
422pickled along with them. Only the instance data are pickled. This is done on
423purpose, so you can fix bugs in a class or add methods to the class and still
424load objects that were created with an earlier version of the class. If you
425plan to have long-lived objects that will see many versions of a class, it may
426be worthwhile to put a version number in the objects so that suitable
427conversions can be made by the class's :meth:`__setstate__` method.
428
429
Georg Brandl116aa622007-08-15 14:28:22 +0000430.. _pickle-inst:
431
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000432Pickling Class Instances
433------------------------
Georg Brandl116aa622007-08-15 14:28:22 +0000434
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000435In this section, we describe the general mechanisms available to you to define,
436customize, and control how class instances are pickled and unpickled.
Georg Brandl116aa622007-08-15 14:28:22 +0000437
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000438In most cases, no additional code is needed to make instances picklable. By
439default, pickle will retrieve the class and the attributes of an instance via
440introspection. When a class instance is unpickled, its :meth:`__init__` method
441is usually *not* invoked. The default behaviour first creates an uninitialized
442instance and then restores the saved attributes. The following code shows an
443implementation of this behaviour::
Georg Brandl85eb8c12007-08-31 16:33:38 +0000444
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000445 def save(obj):
446 return (obj.__class__, obj.__dict__)
447
448 def load(cls, attributes):
449 obj = cls.__new__(cls)
450 obj.__dict__.update(attributes)
451 return obj
Georg Brandl116aa622007-08-15 14:28:22 +0000452
Georg Brandl6faee4e2010-09-21 14:48:28 +0000453Classes can alter the default behaviour by providing one or several special
Georg Brandlc8148262010-10-17 11:13:37 +0000454methods:
Georg Brandl116aa622007-08-15 14:28:22 +0000455
Georg Brandlc8148262010-10-17 11:13:37 +0000456.. method:: object.__getnewargs__()
Georg Brandl116aa622007-08-15 14:28:22 +0000457
Georg Brandlc8148262010-10-17 11:13:37 +0000458 In protocol 2 and newer, classes that implements the :meth:`__getnewargs__`
459 method can dictate the values passed to the :meth:`__new__` method upon
460 unpickling. This is often needed for classes whose :meth:`__new__` method
461 requires arguments.
Georg Brandl116aa622007-08-15 14:28:22 +0000462
Georg Brandl116aa622007-08-15 14:28:22 +0000463
Georg Brandlc8148262010-10-17 11:13:37 +0000464.. method:: object.__getstate__()
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000465
Georg Brandlc8148262010-10-17 11:13:37 +0000466 Classes can further influence how their instances are pickled; if the class
467 defines the method :meth:`__getstate__`, it is called and the returned object
468 is pickled as the contents for the instance, instead of the contents of the
469 instance's dictionary. If the :meth:`__getstate__` method is absent, the
470 instance's :attr:`__dict__` is pickled as usual.
Georg Brandl116aa622007-08-15 14:28:22 +0000471
Georg Brandlc8148262010-10-17 11:13:37 +0000472
473.. method:: object.__setstate__(state)
474
475 Upon unpickling, if the class defines :meth:`__setstate__`, it is called with
476 the unpickled state. In that case, there is no requirement for the state
477 object to be a dictionary. Otherwise, the pickled state must be a dictionary
478 and its items are assigned to the new instance's dictionary.
479
480 .. note::
481
482 If :meth:`__getstate__` returns a false value, the :meth:`__setstate__`
483 method will not be called upon unpickling.
484
Georg Brandl116aa622007-08-15 14:28:22 +0000485
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000486Refer to the section :ref:`pickle-state` for more information about how to use
487the methods :meth:`__getstate__` and :meth:`__setstate__`.
Georg Brandl116aa622007-08-15 14:28:22 +0000488
Benjamin Petersond23f8222009-04-05 19:13:16 +0000489.. note::
Georg Brandle720c0a2009-04-27 16:20:50 +0000490
Benjamin Petersond23f8222009-04-05 19:13:16 +0000491 At unpickling time, some methods like :meth:`__getattr__`,
492 :meth:`__getattribute__`, or :meth:`__setattr__` may be called upon the
Georg Brandlc8148262010-10-17 11:13:37 +0000493 instance. In case those methods rely on some internal invariant being true,
494 the type should implement :meth:`__getnewargs__` to establish such an
495 invariant; otherwise, neither :meth:`__new__` nor :meth:`__init__` will be
496 called.
Benjamin Petersond23f8222009-04-05 19:13:16 +0000497
Georg Brandlc8148262010-10-17 11:13:37 +0000498.. index:: pair: copy; protocol
Christian Heimes05e8be12008-02-23 18:30:17 +0000499
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000500As we shall see, pickle does not use directly the methods described above. In
501fact, these methods are part of the copy protocol which implements the
502:meth:`__reduce__` special method. The copy protocol provides a unified
503interface for retrieving the data necessary for pickling and copying
Georg Brandl48310cd2009-01-03 21:18:54 +0000504objects. [#]_
Georg Brandl116aa622007-08-15 14:28:22 +0000505
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000506Although powerful, implementing :meth:`__reduce__` directly in your classes is
507error prone. For this reason, class designers should use the high-level
508interface (i.e., :meth:`__getnewargs__`, :meth:`__getstate__` and
Georg Brandlc8148262010-10-17 11:13:37 +0000509:meth:`__setstate__`) whenever possible. We will show, however, cases where
510using :meth:`__reduce__` is the only option or leads to more efficient pickling
511or both.
Georg Brandl116aa622007-08-15 14:28:22 +0000512
Georg Brandlc8148262010-10-17 11:13:37 +0000513.. method:: object.__reduce__()
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000514
Georg Brandlc8148262010-10-17 11:13:37 +0000515 The interface is currently defined as follows. The :meth:`__reduce__` method
516 takes no argument and shall return either a string or preferably a tuple (the
517 returned object is often referred to as the "reduce value").
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000518
Georg Brandlc8148262010-10-17 11:13:37 +0000519 If a string is returned, the string should be interpreted as the name of a
520 global variable. It should be the object's local name relative to its
521 module; the pickle module searches the module namespace to determine the
522 object's module. This behaviour is typically useful for singletons.
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000523
Georg Brandlc8148262010-10-17 11:13:37 +0000524 When a tuple is returned, it must be between two and five items long.
525 Optional items can either be omitted, or ``None`` can be provided as their
526 value. The semantics of each item are in order:
Georg Brandl116aa622007-08-15 14:28:22 +0000527
Georg Brandlc8148262010-10-17 11:13:37 +0000528 .. XXX Mention __newobj__ special-case?
Georg Brandl116aa622007-08-15 14:28:22 +0000529
Georg Brandlc8148262010-10-17 11:13:37 +0000530 * A callable object that will be called to create the initial version of the
531 object.
Georg Brandl116aa622007-08-15 14:28:22 +0000532
Georg Brandlc8148262010-10-17 11:13:37 +0000533 * A tuple of arguments for the callable object. An empty tuple must be given
534 if the callable does not accept any argument.
Georg Brandl116aa622007-08-15 14:28:22 +0000535
Georg Brandlc8148262010-10-17 11:13:37 +0000536 * Optionally, the object's state, which will be passed to the object's
537 :meth:`__setstate__` method as previously described. If the object has no
538 such method then, the value must be a dictionary and it will be added to
539 the object's :attr:`__dict__` attribute.
Georg Brandl116aa622007-08-15 14:28:22 +0000540
Georg Brandlc8148262010-10-17 11:13:37 +0000541 * Optionally, an iterator (and not a sequence) yielding successive items.
542 These items will be appended to the object either using
543 ``obj.append(item)`` or, in batch, using ``obj.extend(list_of_items)``.
544 This is primarily used for list subclasses, but may be used by other
545 classes as long as they have :meth:`append` and :meth:`extend` methods with
546 the appropriate signature. (Whether :meth:`append` or :meth:`extend` is
547 used depends on which pickle protocol version is used as well as the number
548 of items to append, so both must be supported.)
Georg Brandl116aa622007-08-15 14:28:22 +0000549
Georg Brandlc8148262010-10-17 11:13:37 +0000550 * Optionally, an iterator (not a sequence) yielding successive key-value
551 pairs. These items will be stored to the object using ``obj[key] =
552 value``. This is primarily used for dictionary subclasses, but may be used
553 by other classes as long as they implement :meth:`__setitem__`.
Georg Brandl116aa622007-08-15 14:28:22 +0000554
Georg Brandlc8148262010-10-17 11:13:37 +0000555
556.. method:: object.__reduce_ex__(protocol)
557
558 Alternatively, a :meth:`__reduce_ex__` method may be defined. The only
559 difference is this method should take a single integer argument, the protocol
560 version. When defined, pickle will prefer it over the :meth:`__reduce__`
561 method. In addition, :meth:`__reduce__` automatically becomes a synonym for
562 the extended version. The main use for this method is to provide
563 backwards-compatible reduce values for older Python releases.
Georg Brandl116aa622007-08-15 14:28:22 +0000564
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000565.. _pickle-persistent:
566
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000567Persistence of External Objects
568^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Georg Brandl116aa622007-08-15 14:28:22 +0000569
Christian Heimes05e8be12008-02-23 18:30:17 +0000570.. index::
571 single: persistent_id (pickle protocol)
572 single: persistent_load (pickle protocol)
573
Georg Brandl116aa622007-08-15 14:28:22 +0000574For the benefit of object persistence, the :mod:`pickle` module supports the
575notion of a reference to an object outside the pickled data stream. Such
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000576objects are referenced by a persistent ID, which should be either a string of
577alphanumeric characters (for protocol 0) [#]_ or just an arbitrary object (for
578any newer protocol).
Georg Brandl116aa622007-08-15 14:28:22 +0000579
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000580The resolution of such persistent IDs is not defined by the :mod:`pickle`
581module; it will delegate this resolution to the user defined methods on the
582pickler and unpickler, :meth:`persistent_id` and :meth:`persistent_load`
583respectively.
Georg Brandl116aa622007-08-15 14:28:22 +0000584
585To pickle objects that have an external persistent id, the pickler must have a
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000586custom :meth:`persistent_id` method that takes an object as an argument and
Georg Brandl116aa622007-08-15 14:28:22 +0000587returns either ``None`` or the persistent id for that object. When ``None`` is
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000588returned, the pickler simply pickles the object as normal. When a persistent ID
589string is returned, the pickler will pickle that object, along with a marker so
590that the unpickler will recognize it as a persistent ID.
Georg Brandl116aa622007-08-15 14:28:22 +0000591
592To unpickle external objects, the unpickler must have a custom
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000593:meth:`persistent_load` method that takes a persistent ID object and returns the
594referenced object.
Georg Brandl116aa622007-08-15 14:28:22 +0000595
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000596Here is a comprehensive example presenting how persistent ID can be used to
597pickle external objects by reference.
Georg Brandl116aa622007-08-15 14:28:22 +0000598
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000599.. literalinclude:: ../includes/dbpickle.py
Alexandre Vassalottibcd1e3a2009-01-23 05:28:16 +0000600
Antoine Pitrou8d3c2902012-03-04 18:31:48 +0100601.. _pickle-dispatch:
602
603Dispatch Tables
604^^^^^^^^^^^^^^^
605
606If one wants to customize pickling of some classes without disturbing
607any other code which depends on pickling, then one can create a
608pickler with a private dispatch table.
609
610The global dispatch table managed by the :mod:`copyreg` module is
611available as :data:`copyreg.dispatch_table`. Therefore, one may
612choose to use a modified copy of :data:`copyreg.dispatch_table` as a
613private dispatch table.
614
615For example ::
616
617 f = io.BytesIO()
618 p = pickle.Pickler(f)
619 p.dispatch_table = copyreg.dispatch_table.copy()
620 p.dispatch_table[SomeClass] = reduce_SomeClass
621
622creates an instance of :class:`pickle.Pickler` with a private dispatch
623table which handles the ``SomeClass`` class specially. Alternatively,
624the code ::
625
626 class MyPickler(pickle.Pickler):
627 dispatch_table = copyreg.dispatch_table.copy()
628 dispatch_table[SomeClass] = reduce_SomeClass
629 f = io.BytesIO()
630 p = MyPickler(f)
631
632does the same, but all instances of ``MyPickler`` will by default
633share the same dispatch table. The equivalent code using the
634:mod:`copyreg` module is ::
635
636 copyreg.pickle(SomeClass, reduce_SomeClass)
637 f = io.BytesIO()
638 p = pickle.Pickler(f)
Georg Brandl116aa622007-08-15 14:28:22 +0000639
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000640.. _pickle-state:
641
642Handling Stateful Objects
643^^^^^^^^^^^^^^^^^^^^^^^^^
644
645.. index::
646 single: __getstate__() (copy protocol)
647 single: __setstate__() (copy protocol)
648
649Here's an example that shows how to modify pickling behavior for a class.
650The :class:`TextReader` class opens a text file, and returns the line number and
651line contents each time its :meth:`readline` method is called. If a
652:class:`TextReader` instance is pickled, all attributes *except* the file object
653member are saved. When the instance is unpickled, the file is reopened, and
654reading resumes from the last location. The :meth:`__setstate__` and
655:meth:`__getstate__` methods are used to implement this behavior. ::
656
657 class TextReader:
658 """Print and number lines in a text file."""
659
660 def __init__(self, filename):
661 self.filename = filename
662 self.file = open(filename)
663 self.lineno = 0
664
665 def readline(self):
666 self.lineno += 1
667 line = self.file.readline()
668 if not line:
669 return None
Alexandre Vassalotti9d7665d2009-04-03 06:13:29 +0000670 if line.endswith('\n'):
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000671 line = line[:-1]
672 return "%i: %s" % (self.lineno, line)
673
674 def __getstate__(self):
675 # Copy the object's state from self.__dict__ which contains
676 # all our instance attributes. Always use the dict.copy()
677 # method to avoid modifying the original state.
678 state = self.__dict__.copy()
679 # Remove the unpicklable entries.
680 del state['file']
681 return state
682
683 def __setstate__(self, state):
684 # Restore instance attributes (i.e., filename and lineno).
685 self.__dict__.update(state)
686 # Restore the previously opened file's state. To do so, we need to
687 # reopen it and read from it until the line count is restored.
688 file = open(self.filename)
689 for _ in range(self.lineno):
690 file.readline()
691 # Finally, save the file.
692 self.file = file
693
694
695A sample usage might be something like this::
696
697 >>> reader = TextReader("hello.txt")
698 >>> reader.readline()
699 '1: Hello world!'
700 >>> reader.readline()
701 '2: I am line number two.'
702 >>> new_reader = pickle.loads(pickle.dumps(reader))
703 >>> new_reader.readline()
704 '3: Goodbye!'
705
706
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000707.. _pickle-restrict:
Georg Brandl116aa622007-08-15 14:28:22 +0000708
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000709Restricting Globals
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000710-------------------
Georg Brandl116aa622007-08-15 14:28:22 +0000711
Christian Heimes05e8be12008-02-23 18:30:17 +0000712.. index::
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000713 single: find_class() (pickle protocol)
Christian Heimes05e8be12008-02-23 18:30:17 +0000714
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000715By default, unpickling will import any class or function that it finds in the
716pickle data. For many applications, this behaviour is unacceptable as it
717permits the unpickler to import and invoke arbitrary code. Just consider what
718this hand-crafted pickle data stream does when loaded::
Georg Brandl116aa622007-08-15 14:28:22 +0000719
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000720 >>> import pickle
721 >>> pickle.loads(b"cos\nsystem\n(S'echo hello world'\ntR.")
722 hello world
723 0
Georg Brandl116aa622007-08-15 14:28:22 +0000724
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000725In this example, the unpickler imports the :func:`os.system` function and then
726apply the string argument "echo hello world". Although this example is
727inoffensive, it is not difficult to imagine one that could damage your system.
Georg Brandl116aa622007-08-15 14:28:22 +0000728
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000729For this reason, you may want to control what gets unpickled by customizing
730:meth:`Unpickler.find_class`. Unlike its name suggests, :meth:`find_class` is
731called whenever a global (i.e., a class or a function) is requested. Thus it is
Ezio Melottie62aad32011-11-18 13:51:10 +0200732possible to either completely forbid globals or restrict them to a safe subset.
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000733
734Here is an example of an unpickler allowing only few safe classes from the
735:mod:`builtins` module to be loaded::
736
737 import builtins
738 import io
739 import pickle
740
741 safe_builtins = {
742 'range',
743 'complex',
744 'set',
745 'frozenset',
746 'slice',
747 }
748
749 class RestrictedUnpickler(pickle.Unpickler):
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000750
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000751 def find_class(self, module, name):
752 # Only allow safe classes from builtins.
753 if module == "builtins" and name in safe_builtins:
754 return getattr(builtins, name)
755 # Forbid everything else.
756 raise pickle.UnpicklingError("global '%s.%s' is forbidden" %
757 (module, name))
758
759 def restricted_loads(s):
760 """Helper function analogous to pickle.loads()."""
761 return RestrictedUnpickler(io.BytesIO(s)).load()
762
763A sample usage of our unpickler working has intended::
764
765 >>> restricted_loads(pickle.dumps([1, 2, range(15)]))
766 [1, 2, range(0, 15)]
767 >>> restricted_loads(b"cos\nsystem\n(S'echo hello world'\ntR.")
768 Traceback (most recent call last):
769 ...
770 pickle.UnpicklingError: global 'os.system' is forbidden
771 >>> restricted_loads(b'cbuiltins\neval\n'
772 ... b'(S\'getattr(__import__("os"), "system")'
773 ... b'("echo hello world")\'\ntR.')
774 Traceback (most recent call last):
775 ...
776 pickle.UnpicklingError: global 'builtins.eval' is forbidden
777
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000778
779.. XXX Add note about how extension codes could evade our protection
Georg Brandl48310cd2009-01-03 21:18:54 +0000780 mechanism (e.g. cached classes do not invokes find_class()).
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000781
782As our examples shows, you have to be careful with what you allow to be
783unpickled. Therefore if security is a concern, you may want to consider
Alexandre Vassalotti9d7665d2009-04-03 06:13:29 +0000784alternatives such as the marshalling API in :mod:`xmlrpc.client` or
785third-party solutions.
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000786
Georg Brandl116aa622007-08-15 14:28:22 +0000787
788.. _pickle-example:
789
Alexandre Vassalotti9d7665d2009-04-03 06:13:29 +0000790Examples
791--------
Georg Brandl116aa622007-08-15 14:28:22 +0000792
Alexandre Vassalotti9d7665d2009-04-03 06:13:29 +0000793For the simplest code, use the :func:`dump` and :func:`load` functions. ::
Georg Brandl116aa622007-08-15 14:28:22 +0000794
795 import pickle
796
Alexandre Vassalottibcd1e3a2009-01-23 05:28:16 +0000797 # An arbitrary collection of objects supported by pickle.
798 data = {
Alexandre Vassalotti9d7665d2009-04-03 06:13:29 +0000799 'a': [1, 2.0, 3, 4+6j],
800 'b': ("character string", b"byte string"),
801 'c': set([None, True, False])
Alexandre Vassalottibcd1e3a2009-01-23 05:28:16 +0000802 }
Georg Brandl116aa622007-08-15 14:28:22 +0000803
Alexandre Vassalottibcd1e3a2009-01-23 05:28:16 +0000804 with open('data.pickle', 'wb') as f:
805 # Pickle the 'data' dictionary using the highest protocol available.
806 pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)
Georg Brandl116aa622007-08-15 14:28:22 +0000807
Georg Brandl116aa622007-08-15 14:28:22 +0000808
Alexandre Vassalottibcd1e3a2009-01-23 05:28:16 +0000809The following example reads the resulting pickled data. ::
Georg Brandl116aa622007-08-15 14:28:22 +0000810
Alexandre Vassalottibcd1e3a2009-01-23 05:28:16 +0000811 import pickle
Georg Brandl116aa622007-08-15 14:28:22 +0000812
Alexandre Vassalottibcd1e3a2009-01-23 05:28:16 +0000813 with open('data.pickle', 'rb') as f:
814 # The protocol version used is detected automatically, so we do not
815 # have to specify it.
816 data = pickle.load(f)
Georg Brandl116aa622007-08-15 14:28:22 +0000817
Georg Brandl116aa622007-08-15 14:28:22 +0000818
Alexandre Vassalotti9d7665d2009-04-03 06:13:29 +0000819.. XXX: Add examples showing how to optimize pickles for size (like using
820.. pickletools.optimize() or the gzip module).
821
822
Georg Brandl116aa622007-08-15 14:28:22 +0000823.. seealso::
824
Alexandre Vassalottif7fa63d2008-05-11 08:55:36 +0000825 Module :mod:`copyreg`
Georg Brandl116aa622007-08-15 14:28:22 +0000826 Pickle interface constructor registration for extension types.
827
Alexandre Vassalotti9d7665d2009-04-03 06:13:29 +0000828 Module :mod:`pickletools`
829 Tools for working with and analyzing pickled data.
830
Georg Brandl116aa622007-08-15 14:28:22 +0000831 Module :mod:`shelve`
832 Indexed databases of objects; uses :mod:`pickle`.
833
834 Module :mod:`copy`
835 Shallow and deep object copying.
836
837 Module :mod:`marshal`
838 High-performance serialization of built-in types.
839
840
Georg Brandl116aa622007-08-15 14:28:22 +0000841.. rubric:: Footnotes
842
843.. [#] Don't confuse this with the :mod:`marshal` module
844
Georg Brandl116aa622007-08-15 14:28:22 +0000845.. [#] The exception raised will likely be an :exc:`ImportError` or an
846 :exc:`AttributeError` but it could be something else.
847
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000848.. [#] The :mod:`copy` module uses this protocol for shallow and deep copying
849 operations.
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000850
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000851.. [#] The limitation on alphanumeric characters is due to the fact
852 the persistent IDs, in protocol 0, are delimited by the newline
853 character. Therefore if any kind of newline characters occurs in
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000854 persistent IDs, the resulting pickle will become unreadable.