blob: 273fb34c0ca2943a1fdb152a9bb57acbdc65cd74 [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>.
Andrew Kuchling587e9702013-11-12 10:02:35 -050015.. sectionauthor:: Barry Warsaw <barry@python.org>
Georg Brandl116aa622007-08-15 14:28:22 +000016
Alexandre Vassalotti9d7665d2009-04-03 06:13:29 +000017
Antoine Pitroud4d60552013-12-07 00:56:59 +010018The :mod:`pickle` module implements binary protocols for serializing and
19de-serializing a Python object structure. *"Pickling"* is the process
20whereby a Python object hierarchy is converted into a byte stream, and
21*"unpickling"* is the inverse operation, whereby a byte stream
22(from a :term:`binary file` or :term:`bytes-like object`) is converted
23back into an object hierarchy. Pickling (and unpickling) is alternatively
24known as "serialization", "marshalling," [#]_ or "flattening"; however, to
25avoid confusion, the terms used here are "pickling" and "unpickling".
Georg Brandl116aa622007-08-15 14:28:22 +000026
Georg Brandl0036bcf2010-10-17 10:24:54 +000027.. warning::
28
29 The :mod:`pickle` module is not intended to be secure against erroneous or
30 maliciously constructed data. Never unpickle data received from an untrusted
31 or unauthenticated source.
32
Georg Brandl116aa622007-08-15 14:28:22 +000033
34Relationship to other Python modules
35------------------------------------
36
Antoine Pitroud4d60552013-12-07 00:56:59 +010037Comparison with ``marshal``
38^^^^^^^^^^^^^^^^^^^^^^^^^^^
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
Antoine Pitroud4d60552013-12-07 00:56:59 +010072Comparison with ``json``
73^^^^^^^^^^^^^^^^^^^^^^^^
Georg Brandl116aa622007-08-15 14:28:22 +000074
Antoine Pitroud4d60552013-12-07 00:56:59 +010075There are fundamental differences between the pickle protocols and
76`JSON (JavaScript Object Notation) <http://json.org>`_:
77
78* JSON is a text serialization format (it outputs unicode text, although
79 most of the time it is then encoded to ``utf-8``), while pickle is
80 a binary serialization format;
81
82* JSON is human-readable, while pickle is not;
83
84* JSON is interoperable and widely used outside of the Python ecosystem,
85 while pickle is Python-specific;
86
87* JSON, by default, can only represent a subset of the Python built-in
88 types, and no custom classes; pickle can represent an extremely large
89 number of Python types (many of them automatically, by clever usage
90 of Python's introspection facilities; complex cases can be tackled by
91 implementing :ref:`specific object APIs <pickle-inst>`).
92
93.. seealso::
94 The :mod:`json` module: a standard library module allowing JSON
95 serialization and deserialization.
Georg Brandl116aa622007-08-15 14:28:22 +000096
97Data stream format
98------------------
99
100.. index::
Georg Brandl116aa622007-08-15 14:28:22 +0000101 single: External Data Representation
102
103The data format used by :mod:`pickle` is Python-specific. This has the
104advantage that there are no restrictions imposed by external standards such as
Antoine Pitroua9494f62012-05-10 15:38:30 +0200105JSON or XDR (which can't represent pointer sharing); however it means that
106non-Python programs may not be able to reconstruct pickled Python objects.
Georg Brandl116aa622007-08-15 14:28:22 +0000107
Antoine Pitroua9494f62012-05-10 15:38:30 +0200108By default, the :mod:`pickle` data format uses a relatively compact binary
109representation. If you need optimal size characteristics, you can efficiently
110:doc:`compress <archiving>` pickled data.
111
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000112The module :mod:`pickletools` contains tools for analyzing data streams
Antoine Pitroua9494f62012-05-10 15:38:30 +0200113generated by :mod:`pickle`. :mod:`pickletools` source code has extensive
114comments about opcodes used by pickle protocols.
Georg Brandl116aa622007-08-15 14:28:22 +0000115
Georg Brandl42f2ae02008-04-06 08:39:37 +0000116There are currently 4 different protocols which can be used for pickling.
Georg Brandl116aa622007-08-15 14:28:22 +0000117
Antoine Pitroua9494f62012-05-10 15:38:30 +0200118* Protocol version 0 is the original "human-readable" protocol and is
Alexandre Vassalottif7d08c72009-01-23 04:50:05 +0000119 backwards compatible with earlier versions of Python.
Georg Brandl116aa622007-08-15 14:28:22 +0000120
Antoine Pitroua9494f62012-05-10 15:38:30 +0200121* Protocol version 1 is an old binary format which is also compatible with
Georg Brandl116aa622007-08-15 14:28:22 +0000122 earlier versions of Python.
123
124* Protocol version 2 was introduced in Python 2.3. It provides much more
Antoine Pitroua9494f62012-05-10 15:38:30 +0200125 efficient pickling of :term:`new-style class`\es. Refer to :pep:`307` for
126 information about improvements brought by protocol 2.
Georg Brandl116aa622007-08-15 14:28:22 +0000127
Antoine Pitroua9494f62012-05-10 15:38:30 +0200128* Protocol version 3 was added in Python 3. It has explicit support for
129 :class:`bytes` objects and cannot be unpickled by Python 2.x. This is
130 the default as well as the current recommended protocol; use it whenever
131 possible.
Georg Brandl116aa622007-08-15 14:28:22 +0000132
Antoine Pitroud4d60552013-12-07 00:56:59 +0100133.. note::
134 Serialization is a more primitive notion than persistence; although
135 :mod:`pickle` reads and writes file objects, it does not handle the issue of
136 naming persistent objects, nor the (even more complicated) issue of concurrent
137 access to persistent objects. The :mod:`pickle` module can transform a complex
138 object into a byte stream and it can transform the byte stream into an object
139 with the same internal structure. Perhaps the most obvious thing to do with
140 these byte streams is to write them onto a file, but it is also conceivable to
141 send them across a network or store them in a database. The :mod:`shelve`
142 module provides a simple interface to pickle and unpickle objects on
143 DBM-style database files.
144
Georg Brandl116aa622007-08-15 14:28:22 +0000145
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000146Module Interface
147----------------
Georg Brandl116aa622007-08-15 14:28:22 +0000148
Antoine Pitroua9494f62012-05-10 15:38:30 +0200149To serialize an object hierarchy, you simply call the :func:`dumps` function.
150Similarly, to de-serialize a data stream, you call the :func:`loads` function.
151However, if you want more control over serialization and de-serialization,
152you can create a :class:`Pickler` or an :class:`Unpickler` object, respectively.
153
154The :mod:`pickle` module provides the following constants:
Georg Brandl116aa622007-08-15 14:28:22 +0000155
156
157.. data:: HIGHEST_PROTOCOL
158
159 The highest protocol version available. This value can be passed as a
160 *protocol* value.
161
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000162.. data:: DEFAULT_PROTOCOL
163
164 The default protocol used for pickling. May be less than HIGHEST_PROTOCOL.
Antoine Pitroua9494f62012-05-10 15:38:30 +0200165 Currently the default protocol is 3, a new protocol designed for Python 3.0.
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000166
167
Georg Brandl116aa622007-08-15 14:28:22 +0000168The :mod:`pickle` module provides the following functions to make the pickling
169process more convenient:
170
Georg Brandl18244152009-09-02 20:34:52 +0000171.. function:: dump(obj, file, protocol=None, \*, fix_imports=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000172
Antoine Pitrou11cb9612010-09-15 11:11:28 +0000173 Write a pickled representation of *obj* to the open :term:`file object` *file*.
174 This is equivalent to ``Pickler(file, protocol).dump(obj)``.
Georg Brandl116aa622007-08-15 14:28:22 +0000175
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000176 The optional *protocol* argument tells the pickler to use the given protocol;
177 supported protocols are 0, 1, 2, 3. The default protocol is 3; a
178 backward-incompatible protocol designed for Python 3.0.
Georg Brandl116aa622007-08-15 14:28:22 +0000179
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000180 Specifying a negative protocol version selects the highest protocol version
181 supported. The higher the protocol used, the more recent the version of
182 Python needed to read the pickle produced.
Georg Brandl116aa622007-08-15 14:28:22 +0000183
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000184 The *file* argument must have a write() method that accepts a single bytes
Antoine Pitrou11cb9612010-09-15 11:11:28 +0000185 argument. It can thus be an on-disk file opened for binary writing, a
186 :class:`io.BytesIO` instance, or any other custom object that meets this
187 interface.
Georg Brandl116aa622007-08-15 14:28:22 +0000188
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200189 If *fix_imports* is true and *protocol* is less than 3, pickle will try to
Antoine Pitroud9dfaa92009-06-04 20:32:06 +0000190 map the new Python 3.x names to the old module names used in Python 2.x,
191 so that the pickle data stream is readable with Python 2.x.
192
Georg Brandl18244152009-09-02 20:34:52 +0000193.. function:: dumps(obj, protocol=None, \*, fix_imports=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000194
Mark Summerfieldb9e23042008-04-21 14:47:45 +0000195 Return the pickled representation of the object as a :class:`bytes`
196 object, instead of writing it to a file.
Georg Brandl116aa622007-08-15 14:28:22 +0000197
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000198 The optional *protocol* argument tells the pickler to use the given protocol;
199 supported protocols are 0, 1, 2, 3. The default protocol is 3; a
200 backward-incompatible protocol designed for Python 3.0.
201
202 Specifying a negative protocol version selects the highest protocol version
203 supported. The higher the protocol used, the more recent the version of
204 Python needed to read the pickle produced.
205
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200206 If *fix_imports* is true and *protocol* is less than 3, pickle will try to
Antoine Pitroud9dfaa92009-06-04 20:32:06 +0000207 map the new Python 3.x names to the old module names used in Python 2.x,
208 so that the pickle data stream is readable with Python 2.x.
209
Georg Brandl18244152009-09-02 20:34:52 +0000210.. function:: load(file, \*, fix_imports=True, encoding="ASCII", errors="strict")
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000211
Antoine Pitrou11cb9612010-09-15 11:11:28 +0000212 Read a pickled object representation from the open :term:`file object` *file*
213 and return the reconstituted object hierarchy specified therein. This is
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000214 equivalent to ``Unpickler(file).load()``.
215
216 The protocol version of the pickle is detected automatically, so no protocol
217 argument is needed. Bytes past the pickled object's representation are
218 ignored.
219
220 The argument *file* must have two methods, a read() method that takes an
221 integer argument, and a readline() method that requires no arguments. Both
Antoine Pitrou11cb9612010-09-15 11:11:28 +0000222 methods should return bytes. Thus *file* can be an on-disk file opened
223 for binary reading, a :class:`io.BytesIO` object, or any other custom object
224 that meets this interface.
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000225
Antoine Pitroud9dfaa92009-06-04 20:32:06 +0000226 Optional keyword arguments are *fix_imports*, *encoding* and *errors*,
Georg Brandl6faee4e2010-09-21 14:48:28 +0000227 which are used to control compatibility support for pickle stream generated
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200228 by Python 2.x. If *fix_imports* is true, pickle will try to map the old
Antoine Pitroud9dfaa92009-06-04 20:32:06 +0000229 Python 2.x names to the new names used in Python 3.x. The *encoding* and
230 *errors* tell pickle how to decode 8-bit string instances pickled by Python
231 2.x; these default to 'ASCII' and 'strict', respectively.
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000232
Georg Brandl18244152009-09-02 20:34:52 +0000233.. function:: loads(bytes_object, \*, fix_imports=True, encoding="ASCII", errors="strict")
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000234
235 Read a pickled object hierarchy from a :class:`bytes` object and return the
236 reconstituted object hierarchy specified therein
237
238 The protocol version of the pickle is detected automatically, so no protocol
239 argument is needed. Bytes past the pickled object's representation are
240 ignored.
241
Antoine Pitroud9dfaa92009-06-04 20:32:06 +0000242 Optional keyword arguments are *fix_imports*, *encoding* and *errors*,
Georg Brandl6faee4e2010-09-21 14:48:28 +0000243 which are used to control compatibility support for pickle stream generated
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200244 by Python 2.x. If *fix_imports* is true, pickle will try to map the old
Antoine Pitroud9dfaa92009-06-04 20:32:06 +0000245 Python 2.x names to the new names used in Python 3.x. The *encoding* and
246 *errors* tell pickle how to decode 8-bit string instances pickled by Python
247 2.x; these default to 'ASCII' and 'strict', respectively.
Georg Brandl116aa622007-08-15 14:28:22 +0000248
Georg Brandl116aa622007-08-15 14:28:22 +0000249
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000250The :mod:`pickle` module defines three exceptions:
Georg Brandl116aa622007-08-15 14:28:22 +0000251
252.. exception:: PickleError
253
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000254 Common base class for the other pickling exceptions. It inherits
Georg Brandl116aa622007-08-15 14:28:22 +0000255 :exc:`Exception`.
256
Georg Brandl116aa622007-08-15 14:28:22 +0000257.. exception:: PicklingError
258
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000259 Error raised when an unpicklable object is encountered by :class:`Pickler`.
260 It inherits :exc:`PickleError`.
Georg Brandl116aa622007-08-15 14:28:22 +0000261
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000262 Refer to :ref:`pickle-picklable` to learn what kinds of objects can be
263 pickled.
264
Georg Brandl116aa622007-08-15 14:28:22 +0000265.. exception:: UnpicklingError
266
Ezio Melottie62aad32011-11-18 13:51:10 +0200267 Error raised when there is a problem unpickling an object, such as a data
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000268 corruption or a security violation. It inherits :exc:`PickleError`.
Georg Brandl116aa622007-08-15 14:28:22 +0000269
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000270 Note that other exceptions may also be raised during unpickling, including
271 (but not necessarily limited to) AttributeError, EOFError, ImportError, and
272 IndexError.
273
274
275The :mod:`pickle` module exports two classes, :class:`Pickler` and
Georg Brandl116aa622007-08-15 14:28:22 +0000276:class:`Unpickler`:
277
Georg Brandl18244152009-09-02 20:34:52 +0000278.. class:: Pickler(file, protocol=None, \*, fix_imports=True)
Georg Brandl116aa622007-08-15 14:28:22 +0000279
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000280 This takes a binary file for writing a pickle data stream.
Georg Brandl116aa622007-08-15 14:28:22 +0000281
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000282 The optional *protocol* argument tells the pickler to use the given protocol;
283 supported protocols are 0, 1, 2, 3. The default protocol is 3; a
284 backward-incompatible protocol designed for Python 3.0.
Georg Brandl116aa622007-08-15 14:28:22 +0000285
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000286 Specifying a negative protocol version selects the highest protocol version
287 supported. The higher the protocol used, the more recent the version of
288 Python needed to read the pickle produced.
Georg Brandl116aa622007-08-15 14:28:22 +0000289
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000290 The *file* argument must have a write() method that accepts a single bytes
Antoine Pitrou11cb9612010-09-15 11:11:28 +0000291 argument. It can thus be an on-disk file opened for binary writing, a
292 :class:`io.BytesIO` instance, or any other custom object that meets this interface.
Georg Brandl116aa622007-08-15 14:28:22 +0000293
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200294 If *fix_imports* is true and *protocol* is less than 3, pickle will try to
Antoine Pitroud9dfaa92009-06-04 20:32:06 +0000295 map the new Python 3.x names to the old module names used in Python 2.x,
296 so that the pickle data stream is readable with Python 2.x.
297
Benjamin Petersone41251e2008-04-25 01:59:09 +0000298 .. method:: dump(obj)
Georg Brandl116aa622007-08-15 14:28:22 +0000299
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000300 Write a pickled representation of *obj* to the open file object given in
301 the constructor.
Georg Brandl116aa622007-08-15 14:28:22 +0000302
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000303 .. method:: persistent_id(obj)
304
305 Do nothing by default. This exists so a subclass can override it.
306
307 If :meth:`persistent_id` returns ``None``, *obj* is pickled as usual. Any
308 other value causes :class:`Pickler` to emit the returned value as a
309 persistent ID for *obj*. The meaning of this persistent ID should be
310 defined by :meth:`Unpickler.persistent_load`. Note that the value
311 returned by :meth:`persistent_id` cannot itself have a persistent ID.
312
313 See :ref:`pickle-persistent` for details and examples of uses.
Georg Brandl116aa622007-08-15 14:28:22 +0000314
Antoine Pitrou8d3c2902012-03-04 18:31:48 +0100315 .. attribute:: dispatch_table
316
317 A pickler object's dispatch table is a registry of *reduction
318 functions* of the kind which can be declared using
319 :func:`copyreg.pickle`. It is a mapping whose keys are classes
320 and whose values are reduction functions. A reduction function
321 takes a single argument of the associated class and should
Serhiy Storchaka5bbbc942013-10-14 10:43:46 +0300322 conform to the same interface as a :meth:`__reduce__`
Antoine Pitrou8d3c2902012-03-04 18:31:48 +0100323 method.
324
325 By default, a pickler object will not have a
326 :attr:`dispatch_table` attribute, and it will instead use the
327 global dispatch table managed by the :mod:`copyreg` module.
328 However, to customize the pickling for a specific pickler object
329 one can set the :attr:`dispatch_table` attribute to a dict-like
330 object. Alternatively, if a subclass of :class:`Pickler` has a
331 :attr:`dispatch_table` attribute then this will be used as the
332 default dispatch table for instances of that class.
333
334 See :ref:`pickle-dispatch` for usage examples.
335
336 .. versionadded:: 3.3
337
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000338 .. attribute:: fast
339
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000340 Deprecated. Enable fast mode if set to a true value. The fast mode
341 disables the usage of memo, therefore speeding the pickling process by not
342 generating superfluous PUT opcodes. It should not be used with
343 self-referential objects, doing otherwise will cause :class:`Pickler` to
344 recurse infinitely.
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000345
346 Use :func:`pickletools.optimize` if you need more compact pickles.
347
Georg Brandl116aa622007-08-15 14:28:22 +0000348
Georg Brandl18244152009-09-02 20:34:52 +0000349.. class:: Unpickler(file, \*, fix_imports=True, encoding="ASCII", errors="strict")
Georg Brandl116aa622007-08-15 14:28:22 +0000350
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000351 This takes a binary file for reading a pickle data stream.
Georg Brandl116aa622007-08-15 14:28:22 +0000352
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000353 The protocol version of the pickle is detected automatically, so no
354 protocol argument is needed.
355
356 The argument *file* must have two methods, a read() method that takes an
357 integer argument, and a readline() method that requires no arguments. Both
Antoine Pitrou11cb9612010-09-15 11:11:28 +0000358 methods should return bytes. Thus *file* can be an on-disk file object opened
359 for binary reading, a :class:`io.BytesIO` object, or any other custom object
360 that meets this interface.
Georg Brandl116aa622007-08-15 14:28:22 +0000361
Antoine Pitroud9dfaa92009-06-04 20:32:06 +0000362 Optional keyword arguments are *fix_imports*, *encoding* and *errors*,
Georg Brandl6faee4e2010-09-21 14:48:28 +0000363 which are used to control compatibility support for pickle stream generated
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200364 by Python 2.x. If *fix_imports* is true, pickle will try to map the old
Antoine Pitroud9dfaa92009-06-04 20:32:06 +0000365 Python 2.x names to the new names used in Python 3.x. The *encoding* and
366 *errors* tell pickle how to decode 8-bit string instances pickled by Python
367 2.x; these default to 'ASCII' and 'strict', respectively.
Georg Brandl116aa622007-08-15 14:28:22 +0000368
Benjamin Petersone41251e2008-04-25 01:59:09 +0000369 .. method:: load()
Georg Brandl116aa622007-08-15 14:28:22 +0000370
Benjamin Petersone41251e2008-04-25 01:59:09 +0000371 Read a pickled object representation from the open file object given in
372 the constructor, and return the reconstituted object hierarchy specified
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000373 therein. Bytes past the pickled object's representation are ignored.
Georg Brandl116aa622007-08-15 14:28:22 +0000374
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000375 .. method:: persistent_load(pid)
Georg Brandl116aa622007-08-15 14:28:22 +0000376
Ezio Melottie62aad32011-11-18 13:51:10 +0200377 Raise an :exc:`UnpicklingError` by default.
Georg Brandl116aa622007-08-15 14:28:22 +0000378
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000379 If defined, :meth:`persistent_load` should return the object specified by
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000380 the persistent ID *pid*. If an invalid persistent ID is encountered, an
Ezio Melottie62aad32011-11-18 13:51:10 +0200381 :exc:`UnpicklingError` should be raised.
Georg Brandl116aa622007-08-15 14:28:22 +0000382
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000383 See :ref:`pickle-persistent` for details and examples of uses.
384
385 .. method:: find_class(module, name)
386
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000387 Import *module* if necessary and return the object called *name* from it,
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000388 where the *module* and *name* arguments are :class:`str` objects. Note,
389 unlike its name suggests, :meth:`find_class` is also used for finding
390 functions.
Georg Brandl116aa622007-08-15 14:28:22 +0000391
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000392 Subclasses may override this to gain control over what type of objects and
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000393 how they can be loaded, potentially reducing security risks. Refer to
394 :ref:`pickle-restrict` for details.
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000395
396
397.. _pickle-picklable:
Georg Brandl116aa622007-08-15 14:28:22 +0000398
399What can be pickled and unpickled?
400----------------------------------
401
402The following types can be pickled:
403
404* ``None``, ``True``, and ``False``
405
Georg Brandlba956ae2007-11-29 17:24:34 +0000406* integers, floating point numbers, complex numbers
Georg Brandl116aa622007-08-15 14:28:22 +0000407
Georg Brandlf6945182008-02-01 11:56:49 +0000408* strings, bytes, bytearrays
Georg Brandl116aa622007-08-15 14:28:22 +0000409
410* tuples, lists, sets, and dictionaries containing only picklable objects
411
412* functions defined at the top level of a module
413
414* built-in functions defined at the top level of a module
415
416* classes that are defined at the top level of a module
417
Serhiy Storchaka5bbbc942013-10-14 10:43:46 +0300418* instances of such classes whose :attr:`~object.__dict__` or the result of
419 calling :meth:`__getstate__` is picklable (see section :ref:`pickle-inst` for
Eli Bendersky78f3ce52013-01-02 05:53:59 -0800420 details).
Georg Brandl116aa622007-08-15 14:28:22 +0000421
422Attempts to pickle unpicklable objects will raise the :exc:`PicklingError`
423exception; when this happens, an unspecified number of bytes may have already
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000424been written to the underlying file. Trying to pickle a highly recursive data
Georg Brandl116aa622007-08-15 14:28:22 +0000425structure may exceed the maximum recursion depth, a :exc:`RuntimeError` will be
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000426raised in this case. You can carefully raise this limit with
Georg Brandl116aa622007-08-15 14:28:22 +0000427:func:`sys.setrecursionlimit`.
428
429Note that functions (built-in and user-defined) are pickled by "fully qualified"
430name reference, not by value. This means that only the function name is
Eli Bendersky78f3ce52013-01-02 05:53:59 -0800431pickled, along with the name of the module the function is defined in. Neither
432the function's code, nor any of its function attributes are pickled. Thus the
Georg Brandl116aa622007-08-15 14:28:22 +0000433defining module must be importable in the unpickling environment, and the module
434must contain the named object, otherwise an exception will be raised. [#]_
435
436Similarly, classes are pickled by named reference, so the same restrictions in
437the unpickling environment apply. Note that none of the class's code or data is
438pickled, so in the following example the class attribute ``attr`` is not
439restored in the unpickling environment::
440
441 class Foo:
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000442 attr = 'A class attribute'
Georg Brandl116aa622007-08-15 14:28:22 +0000443
444 picklestring = pickle.dumps(Foo)
445
446These restrictions are why picklable functions and classes must be defined in
447the top level of a module.
448
449Similarly, when class instances are pickled, their class's code and data are not
450pickled along with them. Only the instance data are pickled. This is done on
451purpose, so you can fix bugs in a class or add methods to the class and still
452load objects that were created with an earlier version of the class. If you
453plan to have long-lived objects that will see many versions of a class, it may
454be worthwhile to put a version number in the objects so that suitable
455conversions can be made by the class's :meth:`__setstate__` method.
456
457
Georg Brandl116aa622007-08-15 14:28:22 +0000458.. _pickle-inst:
459
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000460Pickling Class Instances
461------------------------
Georg Brandl116aa622007-08-15 14:28:22 +0000462
Serhiy Storchaka5bbbc942013-10-14 10:43:46 +0300463.. currentmodule:: None
464
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000465In this section, we describe the general mechanisms available to you to define,
466customize, and control how class instances are pickled and unpickled.
Georg Brandl116aa622007-08-15 14:28:22 +0000467
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000468In most cases, no additional code is needed to make instances picklable. By
469default, pickle will retrieve the class and the attributes of an instance via
470introspection. When a class instance is unpickled, its :meth:`__init__` method
471is usually *not* invoked. The default behaviour first creates an uninitialized
472instance and then restores the saved attributes. The following code shows an
473implementation of this behaviour::
Georg Brandl85eb8c12007-08-31 16:33:38 +0000474
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000475 def save(obj):
476 return (obj.__class__, obj.__dict__)
477
478 def load(cls, attributes):
479 obj = cls.__new__(cls)
480 obj.__dict__.update(attributes)
481 return obj
Georg Brandl116aa622007-08-15 14:28:22 +0000482
Georg Brandl6faee4e2010-09-21 14:48:28 +0000483Classes can alter the default behaviour by providing one or several special
Georg Brandlc8148262010-10-17 11:13:37 +0000484methods:
Georg Brandl116aa622007-08-15 14:28:22 +0000485
Georg Brandlc8148262010-10-17 11:13:37 +0000486.. method:: object.__getnewargs__()
Georg Brandl116aa622007-08-15 14:28:22 +0000487
Georg Brandlc8148262010-10-17 11:13:37 +0000488 In protocol 2 and newer, classes that implements the :meth:`__getnewargs__`
489 method can dictate the values passed to the :meth:`__new__` method upon
490 unpickling. This is often needed for classes whose :meth:`__new__` method
491 requires arguments.
Georg Brandl116aa622007-08-15 14:28:22 +0000492
Georg Brandl116aa622007-08-15 14:28:22 +0000493
Georg Brandlc8148262010-10-17 11:13:37 +0000494.. method:: object.__getstate__()
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000495
Georg Brandlc8148262010-10-17 11:13:37 +0000496 Classes can further influence how their instances are pickled; if the class
497 defines the method :meth:`__getstate__`, it is called and the returned object
498 is pickled as the contents for the instance, instead of the contents of the
499 instance's dictionary. If the :meth:`__getstate__` method is absent, the
Serhiy Storchaka5bbbc942013-10-14 10:43:46 +0300500 instance's :attr:`~object.__dict__` is pickled as usual.
Georg Brandl116aa622007-08-15 14:28:22 +0000501
Georg Brandlc8148262010-10-17 11:13:37 +0000502
503.. method:: object.__setstate__(state)
504
505 Upon unpickling, if the class defines :meth:`__setstate__`, it is called with
506 the unpickled state. In that case, there is no requirement for the state
507 object to be a dictionary. Otherwise, the pickled state must be a dictionary
508 and its items are assigned to the new instance's dictionary.
509
510 .. note::
511
512 If :meth:`__getstate__` returns a false value, the :meth:`__setstate__`
513 method will not be called upon unpickling.
514
Georg Brandl116aa622007-08-15 14:28:22 +0000515
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000516Refer to the section :ref:`pickle-state` for more information about how to use
517the methods :meth:`__getstate__` and :meth:`__setstate__`.
Georg Brandl116aa622007-08-15 14:28:22 +0000518
Benjamin Petersond23f8222009-04-05 19:13:16 +0000519.. note::
Georg Brandle720c0a2009-04-27 16:20:50 +0000520
Benjamin Petersond23f8222009-04-05 19:13:16 +0000521 At unpickling time, some methods like :meth:`__getattr__`,
522 :meth:`__getattribute__`, or :meth:`__setattr__` may be called upon the
Georg Brandlc8148262010-10-17 11:13:37 +0000523 instance. In case those methods rely on some internal invariant being true,
524 the type should implement :meth:`__getnewargs__` to establish such an
525 invariant; otherwise, neither :meth:`__new__` nor :meth:`__init__` will be
526 called.
Benjamin Petersond23f8222009-04-05 19:13:16 +0000527
Georg Brandlc8148262010-10-17 11:13:37 +0000528.. index:: pair: copy; protocol
Christian Heimes05e8be12008-02-23 18:30:17 +0000529
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000530As we shall see, pickle does not use directly the methods described above. In
531fact, these methods are part of the copy protocol which implements the
532:meth:`__reduce__` special method. The copy protocol provides a unified
533interface for retrieving the data necessary for pickling and copying
Georg Brandl48310cd2009-01-03 21:18:54 +0000534objects. [#]_
Georg Brandl116aa622007-08-15 14:28:22 +0000535
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000536Although powerful, implementing :meth:`__reduce__` directly in your classes is
537error prone. For this reason, class designers should use the high-level
538interface (i.e., :meth:`__getnewargs__`, :meth:`__getstate__` and
Georg Brandlc8148262010-10-17 11:13:37 +0000539:meth:`__setstate__`) whenever possible. We will show, however, cases where
540using :meth:`__reduce__` is the only option or leads to more efficient pickling
541or both.
Georg Brandl116aa622007-08-15 14:28:22 +0000542
Georg Brandlc8148262010-10-17 11:13:37 +0000543.. method:: object.__reduce__()
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000544
Georg Brandlc8148262010-10-17 11:13:37 +0000545 The interface is currently defined as follows. The :meth:`__reduce__` method
546 takes no argument and shall return either a string or preferably a tuple (the
547 returned object is often referred to as the "reduce value").
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000548
Georg Brandlc8148262010-10-17 11:13:37 +0000549 If a string is returned, the string should be interpreted as the name of a
550 global variable. It should be the object's local name relative to its
551 module; the pickle module searches the module namespace to determine the
552 object's module. This behaviour is typically useful for singletons.
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000553
Georg Brandlc8148262010-10-17 11:13:37 +0000554 When a tuple is returned, it must be between two and five items long.
555 Optional items can either be omitted, or ``None`` can be provided as their
556 value. The semantics of each item are in order:
Georg Brandl116aa622007-08-15 14:28:22 +0000557
Georg Brandlc8148262010-10-17 11:13:37 +0000558 .. XXX Mention __newobj__ special-case?
Georg Brandl116aa622007-08-15 14:28:22 +0000559
Georg Brandlc8148262010-10-17 11:13:37 +0000560 * A callable object that will be called to create the initial version of the
561 object.
Georg Brandl116aa622007-08-15 14:28:22 +0000562
Georg Brandlc8148262010-10-17 11:13:37 +0000563 * A tuple of arguments for the callable object. An empty tuple must be given
564 if the callable does not accept any argument.
Georg Brandl116aa622007-08-15 14:28:22 +0000565
Georg Brandlc8148262010-10-17 11:13:37 +0000566 * Optionally, the object's state, which will be passed to the object's
567 :meth:`__setstate__` method as previously described. If the object has no
568 such method then, the value must be a dictionary and it will be added to
Serhiy Storchaka5bbbc942013-10-14 10:43:46 +0300569 the object's :attr:`~object.__dict__` attribute.
Georg Brandl116aa622007-08-15 14:28:22 +0000570
Georg Brandlc8148262010-10-17 11:13:37 +0000571 * Optionally, an iterator (and not a sequence) yielding successive items.
572 These items will be appended to the object either using
573 ``obj.append(item)`` or, in batch, using ``obj.extend(list_of_items)``.
574 This is primarily used for list subclasses, but may be used by other
575 classes as long as they have :meth:`append` and :meth:`extend` methods with
576 the appropriate signature. (Whether :meth:`append` or :meth:`extend` is
577 used depends on which pickle protocol version is used as well as the number
578 of items to append, so both must be supported.)
Georg Brandl116aa622007-08-15 14:28:22 +0000579
Georg Brandlc8148262010-10-17 11:13:37 +0000580 * Optionally, an iterator (not a sequence) yielding successive key-value
581 pairs. These items will be stored to the object using ``obj[key] =
582 value``. This is primarily used for dictionary subclasses, but may be used
583 by other classes as long as they implement :meth:`__setitem__`.
Georg Brandl116aa622007-08-15 14:28:22 +0000584
Georg Brandlc8148262010-10-17 11:13:37 +0000585
586.. method:: object.__reduce_ex__(protocol)
587
588 Alternatively, a :meth:`__reduce_ex__` method may be defined. The only
589 difference is this method should take a single integer argument, the protocol
590 version. When defined, pickle will prefer it over the :meth:`__reduce__`
591 method. In addition, :meth:`__reduce__` automatically becomes a synonym for
592 the extended version. The main use for this method is to provide
593 backwards-compatible reduce values for older Python releases.
Georg Brandl116aa622007-08-15 14:28:22 +0000594
Serhiy Storchaka5bbbc942013-10-14 10:43:46 +0300595.. currentmodule:: pickle
596
Alexandre Vassalotti758bca62008-10-18 19:25:07 +0000597.. _pickle-persistent:
598
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000599Persistence of External Objects
600^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Georg Brandl116aa622007-08-15 14:28:22 +0000601
Christian Heimes05e8be12008-02-23 18:30:17 +0000602.. index::
603 single: persistent_id (pickle protocol)
604 single: persistent_load (pickle protocol)
605
Georg Brandl116aa622007-08-15 14:28:22 +0000606For the benefit of object persistence, the :mod:`pickle` module supports the
607notion of a reference to an object outside the pickled data stream. Such
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000608objects are referenced by a persistent ID, which should be either a string of
609alphanumeric characters (for protocol 0) [#]_ or just an arbitrary object (for
610any newer protocol).
Georg Brandl116aa622007-08-15 14:28:22 +0000611
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000612The resolution of such persistent IDs is not defined by the :mod:`pickle`
613module; it will delegate this resolution to the user defined methods on the
Serhiy Storchaka5bbbc942013-10-14 10:43:46 +0300614pickler and unpickler, :meth:`~Pickler.persistent_id` and
615:meth:`~Unpickler.persistent_load` respectively.
Georg Brandl116aa622007-08-15 14:28:22 +0000616
617To pickle objects that have an external persistent id, the pickler must have a
Serhiy Storchaka5bbbc942013-10-14 10:43:46 +0300618custom :meth:`~Pickler.persistent_id` method that takes an object as an
619argument and returns either ``None`` or the persistent id for that object.
620When ``None`` is returned, the pickler simply pickles the object as normal.
621When a persistent ID string is returned, the pickler will pickle that object,
622along with a marker so that the unpickler will recognize it as a persistent ID.
Georg Brandl116aa622007-08-15 14:28:22 +0000623
624To unpickle external objects, the unpickler must have a custom
Serhiy Storchaka5bbbc942013-10-14 10:43:46 +0300625:meth:`~Unpickler.persistent_load` method that takes a persistent ID object and
626returns the referenced object.
Georg Brandl116aa622007-08-15 14:28:22 +0000627
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000628Here is a comprehensive example presenting how persistent ID can be used to
629pickle external objects by reference.
Georg Brandl116aa622007-08-15 14:28:22 +0000630
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000631.. literalinclude:: ../includes/dbpickle.py
Alexandre Vassalottibcd1e3a2009-01-23 05:28:16 +0000632
Antoine Pitrou8d3c2902012-03-04 18:31:48 +0100633.. _pickle-dispatch:
634
635Dispatch Tables
636^^^^^^^^^^^^^^^
637
638If one wants to customize pickling of some classes without disturbing
639any other code which depends on pickling, then one can create a
640pickler with a private dispatch table.
641
642The global dispatch table managed by the :mod:`copyreg` module is
643available as :data:`copyreg.dispatch_table`. Therefore, one may
644choose to use a modified copy of :data:`copyreg.dispatch_table` as a
645private dispatch table.
646
647For example ::
648
649 f = io.BytesIO()
650 p = pickle.Pickler(f)
651 p.dispatch_table = copyreg.dispatch_table.copy()
652 p.dispatch_table[SomeClass] = reduce_SomeClass
653
654creates an instance of :class:`pickle.Pickler` with a private dispatch
655table which handles the ``SomeClass`` class specially. Alternatively,
656the code ::
657
658 class MyPickler(pickle.Pickler):
659 dispatch_table = copyreg.dispatch_table.copy()
660 dispatch_table[SomeClass] = reduce_SomeClass
661 f = io.BytesIO()
662 p = MyPickler(f)
663
664does the same, but all instances of ``MyPickler`` will by default
665share the same dispatch table. The equivalent code using the
666:mod:`copyreg` module is ::
667
668 copyreg.pickle(SomeClass, reduce_SomeClass)
669 f = io.BytesIO()
670 p = pickle.Pickler(f)
Georg Brandl116aa622007-08-15 14:28:22 +0000671
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000672.. _pickle-state:
673
674Handling Stateful Objects
675^^^^^^^^^^^^^^^^^^^^^^^^^
676
677.. index::
678 single: __getstate__() (copy protocol)
679 single: __setstate__() (copy protocol)
680
681Here's an example that shows how to modify pickling behavior for a class.
682The :class:`TextReader` class opens a text file, and returns the line number and
Serhiy Storchaka5bbbc942013-10-14 10:43:46 +0300683line contents each time its :meth:`!readline` method is called. If a
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000684:class:`TextReader` instance is pickled, all attributes *except* the file object
685member are saved. When the instance is unpickled, the file is reopened, and
686reading resumes from the last location. The :meth:`__setstate__` and
687:meth:`__getstate__` methods are used to implement this behavior. ::
688
689 class TextReader:
690 """Print and number lines in a text file."""
691
692 def __init__(self, filename):
693 self.filename = filename
694 self.file = open(filename)
695 self.lineno = 0
696
697 def readline(self):
698 self.lineno += 1
699 line = self.file.readline()
700 if not line:
701 return None
Alexandre Vassalotti9d7665d2009-04-03 06:13:29 +0000702 if line.endswith('\n'):
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000703 line = line[:-1]
704 return "%i: %s" % (self.lineno, line)
705
706 def __getstate__(self):
707 # Copy the object's state from self.__dict__ which contains
708 # all our instance attributes. Always use the dict.copy()
709 # method to avoid modifying the original state.
710 state = self.__dict__.copy()
711 # Remove the unpicklable entries.
712 del state['file']
713 return state
714
715 def __setstate__(self, state):
716 # Restore instance attributes (i.e., filename and lineno).
717 self.__dict__.update(state)
718 # Restore the previously opened file's state. To do so, we need to
719 # reopen it and read from it until the line count is restored.
720 file = open(self.filename)
721 for _ in range(self.lineno):
722 file.readline()
723 # Finally, save the file.
724 self.file = file
725
726
727A sample usage might be something like this::
728
729 >>> reader = TextReader("hello.txt")
730 >>> reader.readline()
731 '1: Hello world!'
732 >>> reader.readline()
733 '2: I am line number two.'
734 >>> new_reader = pickle.loads(pickle.dumps(reader))
735 >>> new_reader.readline()
736 '3: Goodbye!'
737
738
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000739.. _pickle-restrict:
Georg Brandl116aa622007-08-15 14:28:22 +0000740
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000741Restricting Globals
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000742-------------------
Georg Brandl116aa622007-08-15 14:28:22 +0000743
Christian Heimes05e8be12008-02-23 18:30:17 +0000744.. index::
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000745 single: find_class() (pickle protocol)
Christian Heimes05e8be12008-02-23 18:30:17 +0000746
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000747By default, unpickling will import any class or function that it finds in the
748pickle data. For many applications, this behaviour is unacceptable as it
749permits the unpickler to import and invoke arbitrary code. Just consider what
750this hand-crafted pickle data stream does when loaded::
Georg Brandl116aa622007-08-15 14:28:22 +0000751
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000752 >>> import pickle
753 >>> pickle.loads(b"cos\nsystem\n(S'echo hello world'\ntR.")
754 hello world
755 0
Georg Brandl116aa622007-08-15 14:28:22 +0000756
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000757In this example, the unpickler imports the :func:`os.system` function and then
758apply the string argument "echo hello world". Although this example is
759inoffensive, it is not difficult to imagine one that could damage your system.
Georg Brandl116aa622007-08-15 14:28:22 +0000760
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000761For this reason, you may want to control what gets unpickled by customizing
Serhiy Storchaka5bbbc942013-10-14 10:43:46 +0300762:meth:`Unpickler.find_class`. Unlike its name suggests,
763:meth:`Unpickler.find_class` is called whenever a global (i.e., a class or
764a function) is requested. Thus it is possible to either completely forbid
765globals or restrict them to a safe subset.
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000766
767Here is an example of an unpickler allowing only few safe classes from the
768:mod:`builtins` module to be loaded::
769
770 import builtins
771 import io
772 import pickle
773
774 safe_builtins = {
775 'range',
776 'complex',
777 'set',
778 'frozenset',
779 'slice',
780 }
781
782 class RestrictedUnpickler(pickle.Unpickler):
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000783
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000784 def find_class(self, module, name):
785 # Only allow safe classes from builtins.
786 if module == "builtins" and name in safe_builtins:
787 return getattr(builtins, name)
788 # Forbid everything else.
789 raise pickle.UnpicklingError("global '%s.%s' is forbidden" %
790 (module, name))
791
792 def restricted_loads(s):
793 """Helper function analogous to pickle.loads()."""
794 return RestrictedUnpickler(io.BytesIO(s)).load()
795
796A sample usage of our unpickler working has intended::
797
798 >>> restricted_loads(pickle.dumps([1, 2, range(15)]))
799 [1, 2, range(0, 15)]
800 >>> restricted_loads(b"cos\nsystem\n(S'echo hello world'\ntR.")
801 Traceback (most recent call last):
802 ...
803 pickle.UnpicklingError: global 'os.system' is forbidden
804 >>> restricted_loads(b'cbuiltins\neval\n'
805 ... b'(S\'getattr(__import__("os"), "system")'
806 ... b'("echo hello world")\'\ntR.')
807 Traceback (most recent call last):
808 ...
809 pickle.UnpicklingError: global 'builtins.eval' is forbidden
810
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000811
812.. XXX Add note about how extension codes could evade our protection
Georg Brandl48310cd2009-01-03 21:18:54 +0000813 mechanism (e.g. cached classes do not invokes find_class()).
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000814
815As our examples shows, you have to be careful with what you allow to be
816unpickled. Therefore if security is a concern, you may want to consider
Alexandre Vassalotti9d7665d2009-04-03 06:13:29 +0000817alternatives such as the marshalling API in :mod:`xmlrpc.client` or
818third-party solutions.
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000819
Georg Brandl116aa622007-08-15 14:28:22 +0000820
Antoine Pitroud4d60552013-12-07 00:56:59 +0100821Performance
822-----------
823
824Recent versions of the pickle protocol (from protocol 2 and upwards) feature
825efficient binary encodings for several common features and built-in types.
826Also, the :mod:`pickle` module has a transparent optimizer written in C.
827
828
Georg Brandl116aa622007-08-15 14:28:22 +0000829.. _pickle-example:
830
Alexandre Vassalotti9d7665d2009-04-03 06:13:29 +0000831Examples
832--------
Georg Brandl116aa622007-08-15 14:28:22 +0000833
Alexandre Vassalotti9d7665d2009-04-03 06:13:29 +0000834For the simplest code, use the :func:`dump` and :func:`load` functions. ::
Georg Brandl116aa622007-08-15 14:28:22 +0000835
836 import pickle
837
Alexandre Vassalottibcd1e3a2009-01-23 05:28:16 +0000838 # An arbitrary collection of objects supported by pickle.
839 data = {
Alexandre Vassalotti9d7665d2009-04-03 06:13:29 +0000840 'a': [1, 2.0, 3, 4+6j],
841 'b': ("character string", b"byte string"),
842 'c': set([None, True, False])
Alexandre Vassalottibcd1e3a2009-01-23 05:28:16 +0000843 }
Georg Brandl116aa622007-08-15 14:28:22 +0000844
Alexandre Vassalottibcd1e3a2009-01-23 05:28:16 +0000845 with open('data.pickle', 'wb') as f:
846 # Pickle the 'data' dictionary using the highest protocol available.
847 pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)
Georg Brandl116aa622007-08-15 14:28:22 +0000848
Georg Brandl116aa622007-08-15 14:28:22 +0000849
Alexandre Vassalottibcd1e3a2009-01-23 05:28:16 +0000850The following example reads the resulting pickled data. ::
Georg Brandl116aa622007-08-15 14:28:22 +0000851
Alexandre Vassalottibcd1e3a2009-01-23 05:28:16 +0000852 import pickle
Georg Brandl116aa622007-08-15 14:28:22 +0000853
Alexandre Vassalottibcd1e3a2009-01-23 05:28:16 +0000854 with open('data.pickle', 'rb') as f:
855 # The protocol version used is detected automatically, so we do not
856 # have to specify it.
857 data = pickle.load(f)
Georg Brandl116aa622007-08-15 14:28:22 +0000858
Georg Brandl116aa622007-08-15 14:28:22 +0000859
Alexandre Vassalotti9d7665d2009-04-03 06:13:29 +0000860.. XXX: Add examples showing how to optimize pickles for size (like using
861.. pickletools.optimize() or the gzip module).
862
863
Georg Brandl116aa622007-08-15 14:28:22 +0000864.. seealso::
865
Alexandre Vassalottif7fa63d2008-05-11 08:55:36 +0000866 Module :mod:`copyreg`
Georg Brandl116aa622007-08-15 14:28:22 +0000867 Pickle interface constructor registration for extension types.
868
Alexandre Vassalotti9d7665d2009-04-03 06:13:29 +0000869 Module :mod:`pickletools`
870 Tools for working with and analyzing pickled data.
871
Georg Brandl116aa622007-08-15 14:28:22 +0000872 Module :mod:`shelve`
873 Indexed databases of objects; uses :mod:`pickle`.
874
875 Module :mod:`copy`
876 Shallow and deep object copying.
877
878 Module :mod:`marshal`
879 High-performance serialization of built-in types.
880
881
Georg Brandl116aa622007-08-15 14:28:22 +0000882.. rubric:: Footnotes
883
884.. [#] Don't confuse this with the :mod:`marshal` module
885
Georg Brandl116aa622007-08-15 14:28:22 +0000886.. [#] The exception raised will likely be an :exc:`ImportError` or an
887 :exc:`AttributeError` but it could be something else.
888
Alexandre Vassalotti73b90a82008-10-29 23:32:33 +0000889.. [#] The :mod:`copy` module uses this protocol for shallow and deep copying
890 operations.
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000891
Alexandre Vassalottid0392862008-10-24 01:32:40 +0000892.. [#] The limitation on alphanumeric characters is due to the fact
893 the persistent IDs, in protocol 0, are delimited by the newline
894 character. Therefore if any kind of newline characters occurs in
Alexandre Vassalotti5f3b63a2008-10-18 20:47:58 +0000895 persistent IDs, the resulting pickle will become unreadable.