| \section{Standard Module \sectcode{copy}} |
| \label{module-copy} |
| \stmodindex{copy} |
| \renewcommand{\indexsubitem}{(copy function)} |
| \ttindex{copy} |
| \ttindex{deepcopy} |
| |
| This module provides generic (shallow and deep) copying operations. |
| |
| Interface summary: |
| |
| \bcode\begin{verbatim} |
| import copy |
| |
| x = copy.copy(y) # make a shallow copy of y |
| x = copy.deepcopy(y) # make a deep copy of y |
| \end{verbatim}\ecode |
| % |
| For module specific errors, \code{copy.error} is raised. |
| |
| The difference between shallow and deep copying is only relevant for |
| compound objects (objects that contain other objects, like lists or |
| class instances): |
| |
| \begin{itemize} |
| |
| \item |
| A {\em shallow copy} constructs a new compound object and then (to the |
| extent possible) inserts {\em references} into it to the objects found |
| in the original. |
| |
| \item |
| A {\em deep copy} constructs a new compound object and then, |
| recursively, inserts {\em copies} into it of the objects found in the |
| original. |
| |
| \end{itemize} |
| |
| Two problems often exist with deep copy operations that don't exist |
| with shallow copy operations: |
| |
| \begin{itemize} |
| |
| \item |
| Recursive objects (compound objects that, directly or indirectly, |
| contain a reference to themselves) may cause a recursive loop. |
| |
| \item |
| Because deep copy copies {\em everything} it may copy too much, e.g.\ |
| administrative data structures that should be shared even between |
| copies. |
| |
| \end{itemize} |
| |
| Python's \code{deepcopy()} operation avoids these problems by: |
| |
| \begin{itemize} |
| |
| \item |
| keeping a table of objects already copied during the current |
| copying pass; and |
| |
| \item |
| letting user-defined classes override the copying operation or the |
| set of components copied. |
| |
| \end{itemize} |
| |
| This version does not copy types like module, class, function, method, |
| nor stack trace, stack frame, nor file, socket, window, nor array, nor |
| any similar types. |
| |
| Classes can use the same interfaces to control copying that they use |
| to control pickling: they can define methods called |
| \code{__getinitargs__()}, \code{__getstate__()} and |
| \code{__setstate__()}. See the description of module \code{pickle} |
| for information on these methods. |
| \stmodindex{pickle} |
| \renewcommand{\indexsubitem}{(copy protocol)} |
| \ttindex{__getinitargs__} |
| \ttindex{__getstate__} |
| \ttindex{__setstate__} |