annotate Doc/libcopy.tex @ 4566:6403c94de50d legacy-trunk

Added safeguard against failure in __del__.
author Guido van Rossum <guido@python.org>
date Wed, 27 Nov 1996 19:39:58 +0000
parents f47bc5554418
children 3468ea8645ca
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2576
f47bc5554418 mass changes; fix titles; add examples; correct typos; clarifications;
Guido van Rossum <guido@python.org>
parents: 2527
diff changeset
1 \section{Standard Module \sectcode{copy}}
2347
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 \stmodindex{copy}
2576
f47bc5554418 mass changes; fix titles; add examples; correct typos; clarifications;
Guido van Rossum <guido@python.org>
parents: 2527
diff changeset
3 \renewcommand{\indexsubitem}{(copy function)}
2347
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 \ttindex{copy}
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 \ttindex{deepcopy}
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 This module provides generic (shallow and deep) copying operations.
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
8
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 Interface summary:
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
10
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 \begin{verbatim}
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 import copy
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
13
2527
815dfaa6a778 small changes by Soren Larsen
Guido van Rossum <guido@python.org>
parents: 2347
diff changeset
14 x = copy.copy(y) # make a shallow copy of y
815dfaa6a778 small changes by Soren Larsen
Guido van Rossum <guido@python.org>
parents: 2347
diff changeset
15 x = copy.deepcopy(y) # make a deep copy of y
2347
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 \end{verbatim}
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
17
2576
f47bc5554418 mass changes; fix titles; add examples; correct typos; clarifications;
Guido van Rossum <guido@python.org>
parents: 2527
diff changeset
18 For module specific errors, \code{copy.error} is raised.
2347
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
19
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 The difference between shallow and deep copying is only relevant for
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 compound objects (objects that contain other objects, like lists or
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 class instances):
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
23
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 \begin{itemize}
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
25
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 \item
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 A {\em shallow copy} constructs a new compound object and then (to the
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 extent possible) inserts {\em references} into it to the objects found
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 in the original.
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
30
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 \item
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 A {\em deep copy} constructs a new compound object and then,
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 recursively, inserts {\em copies} into it of the objects found in the
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 original.
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
35
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 \end{itemize}
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
37
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 Two problems often exist with deep copy operations that don't exist
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 with shallow copy operations:
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
40
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 \begin{itemize}
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
42
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 \item
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 Recursive objects (compound objects that, directly or indirectly,
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 contain a reference to themselves) may cause a recursive loop.
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
46
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 \item
2527
815dfaa6a778 small changes by Soren Larsen
Guido van Rossum <guido@python.org>
parents: 2347
diff changeset
48 Because deep copy copies {\em everything} it may copy too much, e.g.\
2347
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 administrative data structures that should be shared even between
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 copies.
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
51
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 \end{itemize}
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
53
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 Python's \code{deepcopy()} operation avoids these problems by:
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
55
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 \begin{itemize}
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
57
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 \item
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 keeping a table of objects already copied during the current
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 copying pass; and
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
61
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 \item
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 letting user-defined classes override the copying operation or the
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 set of components copied.
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
65
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 \end{itemize}
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
67
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 This version does not copy types like module, class, function, method,
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 nor stack trace, stack frame, nor file, socket, window, nor array, nor
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 any similar types.
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
71
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 Classes can use the same interfaces to control copying that they use
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 to control pickling: they can define methods called
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 \code{__getinitargs__()}, \code{__getstate__()} and
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 \code{__setstate__()}. See the description of module \code{pickle}
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 for information on these methods.
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 \stmodindex{pickle}
2576
f47bc5554418 mass changes; fix titles; add examples; correct typos; clarifications;
Guido van Rossum <guido@python.org>
parents: 2527
diff changeset
78 \renewcommand{\indexsubitem}{(copy protocol)}
2347
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 \ttindex{__getinitargs__}
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
80 \ttindex{__getstate__}
d05685993476 added docs for pickle, shelve and copy
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 \ttindex{__setstate__}