diff options
author | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-03 11:25:13 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-03 11:25:13 +0000 |
commit | 458120dd40db6b4df55a4e96b650e16798ef06a0 (patch) | |
tree | 8f82685be24fef97e715c6f5ca4c68d34d5074ee /sys/src/cmd/python/Doc/lib/libcopy.tex | |
parent | 3a742c699f6806c1145aea5149bf15de15a0afd7 (diff) |
add hg and python
Diffstat (limited to 'sys/src/cmd/python/Doc/lib/libcopy.tex')
-rw-r--r-- | sys/src/cmd/python/Doc/lib/libcopy.tex | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/sys/src/cmd/python/Doc/lib/libcopy.tex b/sys/src/cmd/python/Doc/lib/libcopy.tex new file mode 100644 index 000000000..59641879d --- /dev/null +++ b/sys/src/cmd/python/Doc/lib/libcopy.tex @@ -0,0 +1,97 @@ +\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 module does not copy types like module, method, +stack trace, stack frame, file, socket, window, array, or any similar +types. It does ``copy'' functions and classes (shallow and deeply), +by returning the original object unchanged; this is compatible with +the 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 use +to control pickling. 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. + +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} |