| \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__} |