| \section{\module{copy} --- | 
 |          Shallow and deep copy operations} | 
 |  | 
 | \declaremodule{standard}{copy} | 
 | \modulesynopsis{Shallow and deep copy operations.} | 
 |  | 
 |  | 
 | This module provides generic (shallow and deep) copying operations. | 
 | \withsubitem{(in copy)}{\ttindex{copy()}\ttindex{deepcopy()}} | 
 |  | 
 | Interface summary: | 
 |  | 
 | \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} | 
 | % | 
 | For module specific errors, \exception{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 \emph{shallow copy} constructs a new compound object and then (to the | 
 | extent possible) inserts \emph{references} into it to the objects found | 
 | in the original. | 
 |  | 
 | \item | 
 | A \emph{deep copy} constructs a new compound object and then, | 
 | recursively, inserts \emph{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 \emph{everything} it may copy too much, | 
 | e.g., administrative data structures that should be shared even | 
 | between copies. | 
 |  | 
 | \end{itemize} | 
 |  | 
 | The \function{deepcopy()} function avoids these problems by: | 
 |  | 
 | \begin{itemize} | 
 |  | 
 | \item | 
 | keeping a ``memo'' dictionary 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, | 
 | stack trace, stack frame, file, socket, window, array, or any similar | 
 | types. | 
 |  | 
 | Classes can use the same interfaces to control copying that they use | 
 | to control pickling: they can define methods called | 
 | \method{__getinitargs__()}, \method{__getstate__()} and | 
 | \method{__setstate__()}.  See the description of module | 
 | \refmodule{pickle}\refstmodindex{pickle} for information on these | 
 | methods.  The \module{copy} module does not use the | 
 | \refmodule[copyreg]{copy_reg} registration module. | 
 | \withsubitem{(copy protocol)}{\ttindex{__getinitargs__()} | 
 |   \ttindex{__getstate__()}\ttindex{__setstate__()}} | 
 |  | 
 | In order for a class to define its own copy implementation, it can | 
 | define special methods \method{__copy__()} and | 
 | \method{__deepcopy__()}.  The former is called to implement the | 
 | shallow copy operation; no additional arguments are passed.  The | 
 | latter is called to implement the deep copy operation; it is passed | 
 | one argument, the memo dictionary.  If the \method{__deepcopy__()} | 
 | implementation needs to make a deep copy of a component, it should | 
 | call the \function{deepcopy()} function with the component as first | 
 | argument and the memo dictionary as second argument. | 
 | \withsubitem{(copy protocol)}{\ttindex{__copy__()}\ttindex{__deepcopy__()}} | 
 |  | 
 | \begin{seealso} | 
 | \seemodule{pickle}{Discussion of the special methods used to | 
 | support object state retrieval and restoration.} | 
 | \end{seealso} |