You need to sign in or sign up before continuing.
pickle.rst 31.6 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
:mod:`pickle` --- Python object serialization
=============================================

.. index::
   single: persistence
   pair: persistent; objects
   pair: serializing; objects
   pair: marshalling; objects
   pair: flattening; objects
   pair: pickling; objects

.. module:: pickle
   :synopsis: Convert Python objects to streams of bytes and back.
14 15
.. sectionauthor:: Jim Kerr <jbkerr@sr.hp.com>.
.. sectionauthor:: Barry Warsaw <barry@zope.com>
16

17

18 19 20 21 22 23
The :mod:`pickle` module implements a fundamental, but powerful algorithm for
serializing and de-serializing a Python object structure.  "Pickling" is the
process whereby a Python object hierarchy is converted into a byte stream, and
"unpickling" is the inverse operation, whereby a byte stream is converted back
into an object hierarchy.  Pickling (and unpickling) is alternatively known as
"serialization", "marshalling," [#]_ or "flattening", however, to avoid
24
confusion, the terms used here are "pickling" and "unpickling"..
25

26 27 28 29 30 31
.. warning::

   The :mod:`pickle` module is not intended to be secure against erroneous or
   maliciously constructed data.  Never unpickle data received from an untrusted
   or unauthenticated source.

32 33 34 35

Relationship to other Python modules
------------------------------------

36
The :mod:`pickle` module has an transparent optimizer (:mod:`_pickle`) written
37
in C.  It is used whenever available.  Otherwise the pure Python implementation is
38
used.
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95

Python has a more primitive serialization module called :mod:`marshal`, but in
general :mod:`pickle` should always be the preferred way to serialize Python
objects.  :mod:`marshal` exists primarily to support Python's :file:`.pyc`
files.

The :mod:`pickle` module differs from :mod:`marshal` several significant ways:

* The :mod:`pickle` module keeps track of the objects it has already serialized,
  so that later references to the same object won't be serialized again.
  :mod:`marshal` doesn't do this.

  This has implications both for recursive objects and object sharing.  Recursive
  objects are objects that contain references to themselves.  These are not
  handled by marshal, and in fact, attempting to marshal recursive objects will
  crash your Python interpreter.  Object sharing happens when there are multiple
  references to the same object in different places in the object hierarchy being
  serialized.  :mod:`pickle` stores such objects only once, and ensures that all
  other references point to the master copy.  Shared objects remain shared, which
  can be very important for mutable objects.

* :mod:`marshal` cannot be used to serialize user-defined classes and their
  instances.  :mod:`pickle` can save and restore class instances transparently,
  however the class definition must be importable and live in the same module as
  when the object was stored.

* The :mod:`marshal` serialization format is not guaranteed to be portable
  across Python versions.  Because its primary job in life is to support
  :file:`.pyc` files, the Python implementers reserve the right to change the
  serialization format in non-backwards compatible ways should the need arise.
  The :mod:`pickle` serialization format is guaranteed to be backwards compatible
  across Python releases.

Note that serialization is a more primitive notion than persistence; although
:mod:`pickle` reads and writes file objects, it does not handle the issue of
naming persistent objects, nor the (even more complicated) issue of concurrent
access to persistent objects.  The :mod:`pickle` module can transform a complex
object into a byte stream and it can transform the byte stream into an object
with the same internal structure.  Perhaps the most obvious thing to do with
these byte streams is to write them onto a file, but it is also conceivable to
send them across a network or store them in a database.  The module
:mod:`shelve` provides a simple interface to pickle and unpickle objects on
DBM-style database files.


Data stream format
------------------

.. index::
   single: XDR
   single: External Data Representation

The data format used by :mod:`pickle` is Python-specific.  This has the
advantage that there are no restrictions imposed by external standards such as
XDR (which can't represent pointer sharing); however it means that non-Python
programs may not be able to reconstruct pickled Python objects.

96 97 98
By default, the :mod:`pickle` data format uses a compact binary representation.
The module :mod:`pickletools` contains tools for analyzing data streams
generated by :mod:`pickle`.
99

100
There are currently 4 different protocols which can be used for pickling.
101

102 103
* Protocol version 0 is the original human-readable protocol and is
  backwards compatible with earlier versions of Python.
104 105 106 107 108

* Protocol version 1 is the old binary format which is also compatible with
  earlier versions of Python.

* Protocol version 2 was introduced in Python 2.3.  It provides much more
109
  efficient pickling of :term:`new-style class`\es.
110

111
* Protocol version 3 was added in Python 3.0.  It has explicit support for
112
  bytes and cannot be unpickled by Python 2.x pickle modules.  This is
113
  the current recommended protocol, use it whenever it is possible.
114

115 116 117
Refer to :pep:`307` for information about improvements brought by
protocol 2.  See :mod:`pickletools`'s source code for extensive
comments about opcodes used by pickle protocols.
118 119


120 121
Module Interface
----------------
122 123 124 125 126 127 128 129 130 131 132 133

To serialize an object hierarchy, you first create a pickler, then you call the
pickler's :meth:`dump` method.  To de-serialize a data stream, you first create
an unpickler, then you call the unpickler's :meth:`load` method.  The
:mod:`pickle` module provides the following constant:


.. data:: HIGHEST_PROTOCOL

   The highest protocol version available.  This value can be passed as a
   *protocol* value.

134 135 136 137 138 139 140
.. data:: DEFAULT_PROTOCOL

   The default protocol used for pickling.  May be less than HIGHEST_PROTOCOL.
   Currently the default protocol is 3; a backward-incompatible protocol
   designed for Python 3.0.


141 142 143
The :mod:`pickle` module provides the following functions to make the pickling
process more convenient:

144
.. function:: dump(obj, file, protocol=None, \*, fix_imports=True)
145

146 147
   Write a pickled representation of *obj* to the open :term:`file object` *file*.
   This is equivalent to ``Pickler(file, protocol).dump(obj)``.
148

149 150 151
   The optional *protocol* argument tells the pickler to use the given protocol;
   supported protocols are 0, 1, 2, 3.  The default protocol is 3; a
   backward-incompatible protocol designed for Python 3.0.
152

153 154 155
   Specifying a negative protocol version selects the highest protocol version
   supported.  The higher the protocol used, the more recent the version of
   Python needed to read the pickle produced.
156

157
   The *file* argument must have a write() method that accepts a single bytes
158 159 160
   argument.  It can thus be an on-disk file opened for binary writing, a
   :class:`io.BytesIO` instance, or any other custom object that meets this
   interface.
161

162 163 164 165
   If *fix_imports* is True and *protocol* is less than 3, pickle will try to
   map the new Python 3.x names to the old module names used in Python 2.x,
   so that the pickle data stream is readable with Python 2.x.

166
.. function:: dumps(obj, protocol=None, \*, fix_imports=True)
167

168 169
   Return the pickled representation of the object as a :class:`bytes`
   object, instead of writing it to a file.
170

171 172 173
   The optional *protocol* argument tells the pickler to use the given protocol;
   supported protocols are 0, 1, 2, 3.  The default protocol is 3; a
   backward-incompatible protocol designed for Python 3.0.
174

175 176 177
   Specifying a negative protocol version selects the highest protocol version
   supported.  The higher the protocol used, the more recent the version of
   Python needed to read the pickle produced.
178

179 180 181 182
   If *fix_imports* is True and *protocol* is less than 3, pickle will try to
   map the new Python 3.x names to the old module names used in Python 2.x,
   so that the pickle data stream is readable with Python 2.x.

183
.. function:: load(file, \*, fix_imports=True, encoding="ASCII", errors="strict")
184

185 186
   Read a pickled object representation from the open :term:`file object` *file*
   and return the reconstituted object hierarchy specified therein.  This is
187
   equivalent to ``Unpickler(file).load()``.
188

189 190 191
   The protocol version of the pickle is detected automatically, so no protocol
   argument is needed.  Bytes past the pickled object's representation are
   ignored.
192

193 194
   The argument *file* must have two methods, a read() method that takes an
   integer argument, and a readline() method that requires no arguments.  Both
195 196 197
   methods should return bytes.  Thus *file* can be an on-disk file opened
   for binary reading, a :class:`io.BytesIO` object, or any other custom object
   that meets this interface.
198

199
   Optional keyword arguments are *fix_imports*, *encoding* and *errors*,
Georg Brandl's avatar
Georg Brandl committed
200
   which are used to control compatibility support for pickle stream generated
201 202 203 204
   by Python 2.x.  If *fix_imports* is True, pickle will try to map the old
   Python 2.x names to the new names used in Python 3.x.  The *encoding* and
   *errors* tell pickle how to decode 8-bit string instances pickled by Python
   2.x; these default to 'ASCII' and 'strict', respectively.
205

206
.. function:: loads(bytes_object, \*, fix_imports=True, encoding="ASCII", errors="strict")
207

208 209
   Read a pickled object hierarchy from a :class:`bytes` object and return the
   reconstituted object hierarchy specified therein
210

211 212 213
   The protocol version of the pickle is detected automatically, so no protocol
   argument is needed.  Bytes past the pickled object's representation are
   ignored.
214

215
   Optional keyword arguments are *fix_imports*, *encoding* and *errors*,
Georg Brandl's avatar
Georg Brandl committed
216
   which are used to control compatibility support for pickle stream generated
217 218 219 220
   by Python 2.x.  If *fix_imports* is True, pickle will try to map the old
   Python 2.x names to the new names used in Python 3.x.  The *encoding* and
   *errors* tell pickle how to decode 8-bit string instances pickled by Python
   2.x; these default to 'ASCII' and 'strict', respectively.
221 222 223


The :mod:`pickle` module defines three exceptions:
224 225 226

.. exception:: PickleError

227
   Common base class for the other pickling exceptions.  It inherits
228 229 230 231
   :exc:`Exception`.

.. exception:: PicklingError

232 233
   Error raised when an unpicklable object is encountered by :class:`Pickler`.
   It inherits :exc:`PickleError`.
234

235 236 237
   Refer to :ref:`pickle-picklable` to learn what kinds of objects can be
   pickled.

238 239
.. exception:: UnpicklingError

240
   Error raised when there a problem unpickling an object, such as a data
241
   corruption or a security violation.  It inherits :exc:`PickleError`.
242

243 244 245
   Note that other exceptions may also be raised during unpickling, including
   (but not necessarily limited to) AttributeError, EOFError, ImportError, and
   IndexError.
246 247


248 249
The :mod:`pickle` module exports two classes, :class:`Pickler` and
:class:`Unpickler`:
250

251
.. class:: Pickler(file, protocol=None, \*, fix_imports=True)
252

253
   This takes a binary file for writing a pickle data stream.
254

255 256 257
   The optional *protocol* argument tells the pickler to use the given protocol;
   supported protocols are 0, 1, 2, 3.  The default protocol is 3; a
   backward-incompatible protocol designed for Python 3.0.
258

259 260 261
   Specifying a negative protocol version selects the highest protocol version
   supported.  The higher the protocol used, the more recent the version of
   Python needed to read the pickle produced.
262

263
   The *file* argument must have a write() method that accepts a single bytes
264 265
   argument.  It can thus be an on-disk file opened for binary writing, a
   :class:`io.BytesIO` instance, or any other custom object that meets this interface.
266

267 268 269 270
   If *fix_imports* is True and *protocol* is less than 3, pickle will try to
   map the new Python 3.x names to the old module names used in Python 2.x,
   so that the pickle data stream is readable with Python 2.x.

271
   .. method:: dump(obj)
272

273 274 275 276
      Write a pickled representation of *obj* to the open file object given in
      the constructor.

   .. method:: persistent_id(obj)
277

278 279 280 281 282 283 284 285 286
      Do nothing by default.  This exists so a subclass can override it.

      If :meth:`persistent_id` returns ``None``, *obj* is pickled as usual.  Any
      other value causes :class:`Pickler` to emit the returned value as a
      persistent ID for *obj*.  The meaning of this persistent ID should be
      defined by :meth:`Unpickler.persistent_load`.  Note that the value
      returned by :meth:`persistent_id` cannot itself have a persistent ID.

      See :ref:`pickle-persistent` for details and examples of uses.
287

288 289
   .. attribute:: fast

290 291 292 293 294
      Deprecated. Enable fast mode if set to a true value.  The fast mode
      disables the usage of memo, therefore speeding the pickling process by not
      generating superfluous PUT opcodes.  It should not be used with
      self-referential objects, doing otherwise will cause :class:`Pickler` to
      recurse infinitely.
295 296 297

      Use :func:`pickletools.optimize` if you need more compact pickles.

298

299
.. class:: Unpickler(file, \*, fix_imports=True, encoding="ASCII", errors="strict")
300

301
   This takes a binary file for reading a pickle data stream.
302

303 304
   The protocol version of the pickle is detected automatically, so no
   protocol argument is needed.
305

306 307
   The argument *file* must have two methods, a read() method that takes an
   integer argument, and a readline() method that requires no arguments.  Both
308 309 310
   methods should return bytes.  Thus *file* can be an on-disk file object opened
   for binary reading, a :class:`io.BytesIO` object, or any other custom object
   that meets this interface.
311

312
   Optional keyword arguments are *fix_imports*, *encoding* and *errors*,
Georg Brandl's avatar
Georg Brandl committed
313
   which are used to control compatibility support for pickle stream generated
314 315 316 317
   by Python 2.x.  If *fix_imports* is True, pickle will try to map the old
   Python 2.x names to the new names used in Python 3.x.  The *encoding* and
   *errors* tell pickle how to decode 8-bit string instances pickled by Python
   2.x; these default to 'ASCII' and 'strict', respectively.
318

319
   .. method:: load()
320

321 322
      Read a pickled object representation from the open file object given in
      the constructor, and return the reconstituted object hierarchy specified
323
      therein.  Bytes past the pickled object's representation are ignored.
324

325
   .. method:: persistent_load(pid)
326

327
      Raise an :exc:`UnpickingError` by default.
328

329
      If defined, :meth:`persistent_load` should return the object specified by
330 331
      the persistent ID *pid*.  If an invalid persistent ID is encountered, an
      :exc:`UnpickingError` should be raised.
332

333 334 335 336
      See :ref:`pickle-persistent` for details and examples of uses.

   .. method:: find_class(module, name)

337
      Import *module* if necessary and return the object called *name* from it,
338 339 340
      where the *module* and *name* arguments are :class:`str` objects.  Note,
      unlike its name suggests, :meth:`find_class` is also used for finding
      functions.
341 342

      Subclasses may override this to gain control over what type of objects and
343 344
      how they can be loaded, potentially reducing security risks. Refer to
      :ref:`pickle-restrict` for details.
345

346

347
.. _pickle-picklable:
348 349 350 351 352 353 354 355

What can be pickled and unpickled?
----------------------------------

The following types can be pickled:

* ``None``, ``True``, and ``False``

356
* integers, floating point numbers, complex numbers
357

358
* strings, bytes, bytearrays
359 360 361 362 363 364 365 366 367 368

* tuples, lists, sets, and dictionaries containing only picklable objects

* functions defined at the top level of a module

* built-in functions defined at the top level of a module

* classes that are defined at the top level of a module

* instances of such classes whose :attr:`__dict__` or :meth:`__setstate__` is
369
  picklable  (see section :ref:`pickle-inst` for details)
370 371 372

Attempts to pickle unpicklable objects will raise the :exc:`PicklingError`
exception; when this happens, an unspecified number of bytes may have already
373
been written to the underlying file.  Trying to pickle a highly recursive data
374
structure may exceed the maximum recursion depth, a :exc:`RuntimeError` will be
375
raised in this case.  You can carefully raise this limit with
376 377 378 379 380 381 382 383 384 385 386 387 388 389 390
:func:`sys.setrecursionlimit`.

Note that functions (built-in and user-defined) are pickled by "fully qualified"
name reference, not by value.  This means that only the function name is
pickled, along with the name of module the function is defined in.  Neither the
function's code, nor any of its function attributes are pickled.  Thus the
defining module must be importable in the unpickling environment, and the module
must contain the named object, otherwise an exception will be raised. [#]_

Similarly, classes are pickled by named reference, so the same restrictions in
the unpickling environment apply.  Note that none of the class's code or data is
pickled, so in the following example the class attribute ``attr`` is not
restored in the unpickling environment::

   class Foo:
391
       attr = 'A class attribute'
392 393 394 395 396 397 398 399 400 401 402 403 404 405 406

   picklestring = pickle.dumps(Foo)

These restrictions are why picklable functions and classes must be defined in
the top level of a module.

Similarly, when class instances are pickled, their class's code and data are not
pickled along with them.  Only the instance data are pickled.  This is done on
purpose, so you can fix bugs in a class or add methods to the class and still
load objects that were created with an earlier version of the class.  If you
plan to have long-lived objects that will see many versions of a class, it may
be worthwhile to put a version number in the objects so that suitable
conversions can be made by the class's :meth:`__setstate__` method.


407
.. _pickle-inst:
408

409 410
Pickling Class Instances
------------------------
411

412 413
In this section, we describe the general mechanisms available to you to define,
customize, and control how class instances are pickled and unpickled.
414

415 416 417 418 419 420
In most cases, no additional code is needed to make instances picklable.  By
default, pickle will retrieve the class and the attributes of an instance via
introspection. When a class instance is unpickled, its :meth:`__init__` method
is usually *not* invoked.  The default behaviour first creates an uninitialized
instance and then restores the saved attributes.  The following code shows an
implementation of this behaviour::
421

422 423
   def save(obj):
       return (obj.__class__, obj.__dict__)
424

425 426 427 428
   def load(cls, attributes):
       obj = cls.__new__(cls)
       obj.__dict__.update(attributes)
       return obj
429

Georg Brandl's avatar
Georg Brandl committed
430
Classes can alter the default behaviour by providing one or several special
431
methods:
Georg Brandl's avatar
Georg Brandl committed
432

433
.. method:: object.__getnewargs__()
434

435 436 437 438
   In protocol 2 and newer, classes that implements the :meth:`__getnewargs__`
   method can dictate the values passed to the :meth:`__new__` method upon
   unpickling.  This is often needed for classes whose :meth:`__new__` method
   requires arguments.
439 440


441
.. method:: object.__getstate__()
442

443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460
   Classes can further influence how their instances are pickled; if the class
   defines the method :meth:`__getstate__`, it is called and the returned object
   is pickled as the contents for the instance, instead of the contents of the
   instance's dictionary.  If the :meth:`__getstate__` method is absent, the
   instance's :attr:`__dict__` is pickled as usual.


.. method:: object.__setstate__(state)

   Upon unpickling, if the class defines :meth:`__setstate__`, it is called with
   the unpickled state.  In that case, there is no requirement for the state
   object to be a dictionary.  Otherwise, the pickled state must be a dictionary
   and its items are assigned to the new instance's dictionary.

   .. note::

      If :meth:`__getstate__` returns a false value, the :meth:`__setstate__`
      method will not be called upon unpickling.
461 462


463 464
Refer to the section :ref:`pickle-state` for more information about how to use
the methods :meth:`__getstate__` and :meth:`__setstate__`.
465

Benjamin Peterson's avatar
Benjamin Peterson committed
466
.. note::
467

Benjamin Peterson's avatar
Benjamin Peterson committed
468 469
   At unpickling time, some methods like :meth:`__getattr__`,
   :meth:`__getattribute__`, or :meth:`__setattr__` may be called upon the
470 471 472 473
   instance.  In case those methods rely on some internal invariant being true,
   the type should implement :meth:`__getnewargs__` to establish such an
   invariant; otherwise, neither :meth:`__new__` nor :meth:`__init__` will be
   called.
Benjamin Peterson's avatar
Benjamin Peterson committed
474

475
.. index:: pair: copy; protocol
476

477 478 479 480
As we shall see, pickle does not use directly the methods described above.  In
fact, these methods are part of the copy protocol which implements the
:meth:`__reduce__` special method.  The copy protocol provides a unified
interface for retrieving the data necessary for pickling and copying
Georg Brandl's avatar
Georg Brandl committed
481
objects. [#]_
482

483 484 485
Although powerful, implementing :meth:`__reduce__` directly in your classes is
error prone.  For this reason, class designers should use the high-level
interface (i.e., :meth:`__getnewargs__`, :meth:`__getstate__` and
486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540
:meth:`__setstate__`) whenever possible.  We will show, however, cases where
using :meth:`__reduce__` is the only option or leads to more efficient pickling
or both.

.. method:: object.__reduce__()

   The interface is currently defined as follows.  The :meth:`__reduce__` method
   takes no argument and shall return either a string or preferably a tuple (the
   returned object is often referred to as the "reduce value").

   If a string is returned, the string should be interpreted as the name of a
   global variable.  It should be the object's local name relative to its
   module; the pickle module searches the module namespace to determine the
   object's module.  This behaviour is typically useful for singletons.

   When a tuple is returned, it must be between two and five items long.
   Optional items can either be omitted, or ``None`` can be provided as their
   value.  The semantics of each item are in order:

   .. XXX Mention __newobj__ special-case?

   * A callable object that will be called to create the initial version of the
     object.

   * A tuple of arguments for the callable object.  An empty tuple must be given
     if the callable does not accept any argument.

   * Optionally, the object's state, which will be passed to the object's
     :meth:`__setstate__` method as previously described.  If the object has no
     such method then, the value must be a dictionary and it will be added to
     the object's :attr:`__dict__` attribute.

   * Optionally, an iterator (and not a sequence) yielding successive items.
     These items will be appended to the object either using
     ``obj.append(item)`` or, in batch, using ``obj.extend(list_of_items)``.
     This is primarily used for list subclasses, but may be used by other
     classes as long as they have :meth:`append` and :meth:`extend` methods with
     the appropriate signature.  (Whether :meth:`append` or :meth:`extend` is
     used depends on which pickle protocol version is used as well as the number
     of items to append, so both must be supported.)

   * Optionally, an iterator (not a sequence) yielding successive key-value
     pairs.  These items will be stored to the object using ``obj[key] =
     value``.  This is primarily used for dictionary subclasses, but may be used
     by other classes as long as they implement :meth:`__setitem__`.


.. method:: object.__reduce_ex__(protocol)

   Alternatively, a :meth:`__reduce_ex__` method may be defined.  The only
   difference is this method should take a single integer argument, the protocol
   version.  When defined, pickle will prefer it over the :meth:`__reduce__`
   method.  In addition, :meth:`__reduce__` automatically becomes a synonym for
   the extended version.  The main use for this method is to provide
   backwards-compatible reduce values for older Python releases.
541

542 543
.. _pickle-persistent:

544 545
Persistence of External Objects
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
546

547 548 549 550
.. index::
   single: persistent_id (pickle protocol)
   single: persistent_load (pickle protocol)

551 552
For the benefit of object persistence, the :mod:`pickle` module supports the
notion of a reference to an object outside the pickled data stream.  Such
553 554 555
objects are referenced by a persistent ID, which should be either a string of
alphanumeric characters (for protocol 0) [#]_ or just an arbitrary object (for
any newer protocol).
556

557 558 559 560
The resolution of such persistent IDs is not defined by the :mod:`pickle`
module; it will delegate this resolution to the user defined methods on the
pickler and unpickler, :meth:`persistent_id` and :meth:`persistent_load`
respectively.
561 562

To pickle objects that have an external persistent id, the pickler must have a
563
custom :meth:`persistent_id` method that takes an object as an argument and
564
returns either ``None`` or the persistent id for that object.  When ``None`` is
565 566 567
returned, the pickler simply pickles the object as normal.  When a persistent ID
string is returned, the pickler will pickle that object, along with a marker so
that the unpickler will recognize it as a persistent ID.
568 569

To unpickle external objects, the unpickler must have a custom
570 571
:meth:`persistent_load` method that takes a persistent ID object and returns the
referenced object.
572

573 574
Here is a comprehensive example presenting how persistent ID can be used to
pickle external objects by reference.
575

576
.. literalinclude:: ../includes/dbpickle.py
577

578

579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608
.. _pickle-state:

Handling Stateful Objects
^^^^^^^^^^^^^^^^^^^^^^^^^

.. index::
   single: __getstate__() (copy protocol)
   single: __setstate__() (copy protocol)

Here's an example that shows how to modify pickling behavior for a class.
The :class:`TextReader` class opens a text file, and returns the line number and
line contents each time its :meth:`readline` method is called. If a
:class:`TextReader` instance is pickled, all attributes *except* the file object
member are saved. When the instance is unpickled, the file is reopened, and
reading resumes from the last location. The :meth:`__setstate__` and
:meth:`__getstate__` methods are used to implement this behavior. ::

   class TextReader:
       """Print and number lines in a text file."""

       def __init__(self, filename):
           self.filename = filename
           self.file = open(filename)
           self.lineno = 0

       def readline(self):
           self.lineno += 1
           line = self.file.readline()
           if not line:
               return None
609
           if line.endswith('\n'):
610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645
               line = line[:-1]
           return "%i: %s" % (self.lineno, line)

       def __getstate__(self):
           # Copy the object's state from self.__dict__ which contains
           # all our instance attributes. Always use the dict.copy()
           # method to avoid modifying the original state.
           state = self.__dict__.copy()
           # Remove the unpicklable entries.
           del state['file']
           return state

       def __setstate__(self, state):
           # Restore instance attributes (i.e., filename and lineno).
           self.__dict__.update(state)
           # Restore the previously opened file's state. To do so, we need to
           # reopen it and read from it until the line count is restored.
           file = open(self.filename)
           for _ in range(self.lineno):
               file.readline()
           # Finally, save the file.
           self.file = file


A sample usage might be something like this::

   >>> reader = TextReader("hello.txt")
   >>> reader.readline()
   '1: Hello world!'
   >>> reader.readline()
   '2: I am line number two.'
   >>> new_reader = pickle.loads(pickle.dumps(reader))
   >>> new_reader.readline()
   '3: Goodbye!'


646
.. _pickle-restrict:
647

648
Restricting Globals
649
-------------------
650

651
.. index::
652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678
   single: find_class() (pickle protocol)

By default, unpickling will import any class or function that it finds in the
pickle data.  For many applications, this behaviour is unacceptable as it
permits the unpickler to import and invoke arbitrary code.  Just consider what
this hand-crafted pickle data stream does when loaded::

    >>> import pickle
    >>> pickle.loads(b"cos\nsystem\n(S'echo hello world'\ntR.")
    hello world
    0

In this example, the unpickler imports the :func:`os.system` function and then
apply the string argument "echo hello world".  Although this example is
inoffensive, it is not difficult to imagine one that could damage your system.

For this reason, you may want to control what gets unpickled by customizing
:meth:`Unpickler.find_class`.  Unlike its name suggests, :meth:`find_class` is
called whenever a global (i.e., a class or a function) is requested.  Thus it is
possible to either forbid completely globals or restrict them to a safe subset.

Here is an example of an unpickler allowing only few safe classes from the
:mod:`builtins` module to be loaded::

   import builtins
   import io
   import pickle
679

680 681 682 683 684 685 686 687 688
   safe_builtins = {
       'range',
       'complex',
       'set',
       'frozenset',
       'slice',
   }

   class RestrictedUnpickler(pickle.Unpickler):
689

690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716
       def find_class(self, module, name):
           # Only allow safe classes from builtins.
           if module == "builtins" and name in safe_builtins:
               return getattr(builtins, name)
           # Forbid everything else.
           raise pickle.UnpicklingError("global '%s.%s' is forbidden" %
                                        (module, name))

   def restricted_loads(s):
       """Helper function analogous to pickle.loads()."""
       return RestrictedUnpickler(io.BytesIO(s)).load()

A sample usage of our unpickler working has intended::

    >>> restricted_loads(pickle.dumps([1, 2, range(15)]))
    [1, 2, range(0, 15)]
    >>> restricted_loads(b"cos\nsystem\n(S'echo hello world'\ntR.")
    Traceback (most recent call last):
      ...
    pickle.UnpicklingError: global 'os.system' is forbidden
    >>> restricted_loads(b'cbuiltins\neval\n'
    ...                  b'(S\'getattr(__import__("os"), "system")'
    ...                  b'("echo hello world")\'\ntR.')
    Traceback (most recent call last):
      ...
    pickle.UnpicklingError: global 'builtins.eval' is forbidden

717 718

.. XXX Add note about how extension codes could evade our protection
Georg Brandl's avatar
Georg Brandl committed
719
   mechanism (e.g. cached classes do not invokes find_class()).
720 721 722

As our examples shows, you have to be careful with what you allow to be
unpickled.  Therefore if security is a concern, you may want to consider
723 724
alternatives such as the marshalling API in :mod:`xmlrpc.client` or
third-party solutions.
725

726 727 728

.. _pickle-example:

729 730
Examples
--------
731

732
For the simplest code, use the :func:`dump` and :func:`load` functions. ::
733 734 735

   import pickle

736 737
   # An arbitrary collection of objects supported by pickle.
   data = {
738 739 740
       'a': [1, 2.0, 3, 4+6j],
       'b': ("character string", b"byte string"),
       'c': set([None, True, False])
741
   }
742

743 744 745
   with open('data.pickle', 'wb') as f:
       # Pickle the 'data' dictionary using the highest protocol available.
       pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)
746 747


748
The following example reads the resulting pickled data. ::
749

750
   import pickle
751

752 753 754 755
   with open('data.pickle', 'rb') as f:
       # The protocol version used is detected automatically, so we do not
       # have to specify it.
       data = pickle.load(f)
756 757


758 759 760 761
.. XXX: Add examples showing how to optimize pickles for size (like using
.. pickletools.optimize() or the gzip module).


762 763
.. seealso::

764
   Module :mod:`copyreg`
765 766
      Pickle interface constructor registration for extension types.

767 768 769
   Module :mod:`pickletools`
      Tools for working with and analyzing pickled data.

770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786
   Module :mod:`shelve`
      Indexed databases of objects; uses :mod:`pickle`.

   Module :mod:`copy`
      Shallow and deep object copying.

   Module :mod:`marshal`
      High-performance serialization of built-in types.


.. rubric:: Footnotes

.. [#] Don't confuse this with the :mod:`marshal` module

.. [#] The exception raised will likely be an :exc:`ImportError` or an
   :exc:`AttributeError` but it could be something else.

787 788
.. [#] The :mod:`copy` module uses this protocol for shallow and deep copying
   operations.
789

790 791 792
.. [#] The limitation on alphanumeric characters is due to the fact
   the persistent IDs, in protocol 0, are delimited by the newline
   character.  Therefore if any kind of newline characters occurs in
793
   persistent IDs, the resulting pickle will become unreadable.