cinap_lenrekadd hg and python4bb9e2215 years agoHistory
97 lines · 3.1 KB · TeX
RawDownload
\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 yx = 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 forcompound objects (objects that contain other objects, like lists orclass instances): \begin{itemize} \itemA \emph{shallow copy} constructs a new compound object and then (to theextent possible) inserts \emph{references} into it to the objects foundin the original. \itemA \emph{deep copy} constructs a new compound object and then,recursively, inserts \emph{copies} into it of the objects found in theoriginal. \end{itemize} Two problems often exist with deep copy operations that don't existwith shallow copy operations: \begin{itemize} \itemRecursive objects (compound objects that, directly or indirectly,contain a reference to themselves) may cause a recursive loop. \itemBecause deep copy copies \emph{everything} it may copy too much,e.g., administrative data structures that should be shared evenbetween copies. \end{itemize} The \function{deepcopy()} function avoids these problems by: \begin{itemize} \itemkeeping a ``memo'' dictionary of objects already copied during the currentcopying pass; and \itemletting user-defined classes override the copying operation or theset of components copied. \end{itemize} This module does not copy types like module, method,stack trace, stack frame, file, socket, window, array, or any similartypes.  It does ``copy'' functions and classes (shallow and deeply),by returning the original object unchanged; this is compatible withthe way these are treated by the \module{pickle} module.\versionchanged[Added copying functions]{2.5} Classes can use the same interfaces to control copying that they useto control pickling.  See the description of module\refmodule{pickle}\refstmodindex{pickle} for information on thesemethods.  The \module{copy} module does not use the\refmodule[copyreg]{copy_reg} registration module. In order for a class to define its own copy implementation, it candefine special methods \method{__copy__()} and\method{__deepcopy__()}.  The former is called to implement theshallow copy operation; no additional arguments are passed.  Thelatter is called to implement the deep copy operation; it is passedone argument, the memo dictionary.  If the \method{__deepcopy__()}implementation needs to make a deep copy of a component, it shouldcall the \function{deepcopy()} function with the component as firstargument and the memo dictionary as second argument.\withsubitem{(copy protocol)}{\ttindex{__copy__()}\ttindex{__deepcopy__()}} \begin{seealso}\seemodule{pickle}{Discussion of the special methods used tosupport object state retrieval and restoration.}\end{seealso}