Mercurial > cpython-lru_cache-weakref
annotate Doc/libcopy.tex @ 5817:48b94de85bf3 legacy-trunk
Extensive changes by AMK.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Thu, 17 Jul 1997 16:29:42 +0000 |
| parents | f47bc5554418 |
| children | 3468ea8645ca |
| 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__} |
