blob: f2ba80b03ed4fcf7c1d66a917cf09e941a0af045 [file] [log] [blame]
Fred Drakeebcf6a82001-02-01 05:20:20 +00001\section{\module{weakref} ---
2 Weak references}
3
4\declaremodule{extension}{weakref}
Fred Drakeeedf9852001-04-11 19:17:11 +00005\modulesynopsis{Support for weak references and weak dictionaries.}
Fred Drakeebcf6a82001-02-01 05:20:20 +00006\moduleauthor{Fred L. Drake, Jr.}{fdrake@acm.org}
Martin v. Löwis5e163332001-02-27 18:36:56 +00007\moduleauthor{Neil Schemenauer}{nas@arctrix.com}
Fred Drake0c209042001-06-29 16:25:07 +00008\moduleauthor{Martin von L\"owis}{martin@loewis.home.cs.tu-berlin.de}
Fred Drakeebcf6a82001-02-01 05:20:20 +00009\sectionauthor{Fred L. Drake, Jr.}{fdrake@acm.org}
10
11\versionadded{2.1}
12
13
14The \module{weakref} module allows the Python programmer to create
15\dfn{weak references} to objects.
16
Tim Peters5a5b2432003-11-21 22:20:57 +000017In the following, the term \dfn{referent} means the
Fred Drake7408da52001-10-26 17:40:22 +000018object which is referred to by a weak reference.
19
Tim Peters5a5b2432003-11-21 22:20:57 +000020A weak reference to an object is not enough to keep the object alive:
21when the only remaining references to a referent are weak references,
22garbage collection is free to destroy the referent and reuse its memory
23for something else. A primary use for weak references is to implement
24caches or mappings holding large objects, where it's desired that a
25large object not be kept alive solely because it appears in a cache or
26mapping. For example, if you have a number of large binary image objects,
27you may wish to associate a name with each. If you used a Python
28dictionary to map names to images, or images to names, the image objects
29would remain alive just because they appeared as values or keys in the
30dictionaries. The \class{WeakKeyDictionary} and
31\class{WeakValueDictionary} classes supplied by the \module{weakref}
32module are an alternative, using weak references to construct mappings
33that don't keep objects alive solely because they appear in the mapping
34objects. If, for example, an image object is a value in a
35\class{WeakValueDictionary}, then when the last remaining
36references to that image object are the weak references held by weak
37mappings, garbage collection can reclaim the object, and its corresponding
38entries in weak mappings are simply deleted.
39
40\class{WeakKeyDictionary} and \class{WeakValueDictionary} use weak
41references in their implementation, setting up callback functions on
42the weak references that notify the weak dictionaries when a key or value
43has been reclaimed by garbage collection. Most programs should find that
44using one of these weak dictionary types is all they need -- it's
45not usually necessary to create your own weak references directly. The
46low-level machinery used by the weak dictionary implementations is exposed
47by the \module{weakref} module for the benefit of advanced uses.
Fred Drakeebcf6a82001-02-01 05:20:20 +000048
Raymond Hettingerf8020e02003-07-02 15:10:38 +000049Not all objects can be weakly referenced; those objects which can
Fred Drake5e0dfac2001-03-23 04:36:02 +000050include class instances, functions written in Python (but not in C),
Raymond Hettinger027bb632004-05-31 03:09:25 +000051methods (both bound and unbound), sets, frozensets, file objects,
52sockets, arrays, deques, and regular expression pattern objects.
53\versionchanged[Added support for files, sockets, arrays, and patterns]{2.4}
54
55Several builtin types such as \class{list} and \class{dict} do not
56directly support weak references but can add support through subclassing:
57
58\begin{verbatim}
59class Dict(dict):
60 pass
61
62obj = Dict(red=1, green=2, blue=3) # this object is weak referencable
63\end{verbatim}
64
65Extension types can easily be made to support weak references; see section
66\ref{weakref-extension}, ``Weak References in Extension Types,'' for more
67information.
Fred Drakeebcf6a82001-02-01 05:20:20 +000068
Fred Drakeebcf6a82001-02-01 05:20:20 +000069
70\begin{funcdesc}{ref}{object\optional{, callback}}
Fred Drake7408da52001-10-26 17:40:22 +000071 Return a weak reference to \var{object}. The original object can be
72 retrieved by calling the reference object if the referent is still
73 alive; if the referent is no longer alive, calling the reference
Fred Drake21ae4f92004-02-03 20:55:15 +000074 object will cause \constant{None} to be returned. If \var{callback} is
Fred Drake4458ece2004-02-03 19:44:26 +000075 provided and not \constant{None},
76 it will be called when the object is about to be
Fred Drakeebcf6a82001-02-01 05:20:20 +000077 finalized; the weak reference object will be passed as the only
78 parameter to the callback; the referent will no longer be available.
Fred Drakeebcf6a82001-02-01 05:20:20 +000079
80 It is allowable for many weak references to be constructed for the
81 same object. Callbacks registered for each weak reference will be
82 called from the most recently registered callback to the oldest
83 registered callback.
84
85 Exceptions raised by the callback will be noted on the standard
Andrew M. Kuchlinge7d7e6c2001-02-14 02:39:11 +000086 error output, but cannot be propagated; they are handled in exactly
Fred Drakeebcf6a82001-02-01 05:20:20 +000087 the same way as exceptions raised from an object's
88 \method{__del__()} method.
Tim Peters5a5b2432003-11-21 22:20:57 +000089
Martin v. Löwis5e163332001-02-27 18:36:56 +000090 Weak references are hashable if the \var{object} is hashable. They
91 will maintain their hash value even after the \var{object} was
92 deleted. If \function{hash()} is called the first time only after
93 the \var{object} was deleted, the call will raise
94 \exception{TypeError}.
Tim Peters5a5b2432003-11-21 22:20:57 +000095
Fred Drake3a2c4622001-10-26 03:00:39 +000096 Weak references support tests for equality, but not ordering. If
Fred Drake7408da52001-10-26 17:40:22 +000097 the referents are still alive, two references have the same
Fred Drakeb03d0cc2001-11-26 21:39:40 +000098 equality relationship as their referents (regardless of the
Fred Drake7408da52001-10-26 17:40:22 +000099 \var{callback}). If either referent has been deleted, the
100 references are equal only if the reference objects are the same
101 object.
Fred Drakeebcf6a82001-02-01 05:20:20 +0000102\end{funcdesc}
103
Fred Drakeebcf6a82001-02-01 05:20:20 +0000104\begin{funcdesc}{proxy}{object\optional{, callback}}
105 Return a proxy to \var{object} which uses a weak reference. This
106 supports use of the proxy in most contexts instead of requiring the
107 explicit dereferencing used with weak reference objects. The
108 returned object will have a type of either \code{ProxyType} or
109 \code{CallableProxyType}, depending on whether \var{object} is
110 callable. Proxy objects are not hashable regardless of the
111 referent; this avoids a number of problems related to their
112 fundamentally mutable nature, and prevent their use as dictionary
Fred Drakee7ec1ef2001-05-10 17:22:17 +0000113 keys. \var{callback} is the same as the parameter of the same name
Fred Drakeebcf6a82001-02-01 05:20:20 +0000114 to the \function{ref()} function.
115\end{funcdesc}
116
117\begin{funcdesc}{getweakrefcount}{object}
118 Return the number of weak references and proxies which refer to
119 \var{object}.
120\end{funcdesc}
121
122\begin{funcdesc}{getweakrefs}{object}
123 Return a list of all weak reference and proxy objects which refer to
124 \var{object}.
125\end{funcdesc}
126
Martin v. Löwis5e163332001-02-27 18:36:56 +0000127\begin{classdesc}{WeakKeyDictionary}{\optional{dict}}
Fred Drakeac154a12001-04-10 19:57:58 +0000128 Mapping class that references keys weakly. Entries in the
129 dictionary will be discarded when there is no longer a strong
130 reference to the key. This can be used to associate additional data
131 with an object owned by other parts of an application without adding
132 attributes to those objects. This can be especially useful with
133 objects that override attribute accesses.
Tim Peters5a5b2432003-11-21 22:20:57 +0000134
135 \note{Caution: Because a \class{WeakKeyDictionary} is built on top
136 of a Python dictionary, it must not change size when iterating
137 over it. This can be difficult to ensure for a
138 \class{WeakKeyDictionary} because actions performed by the
139 program during iteration may cause items in the dictionary
140 to vanish "by magic" (as a side effect of garbage collection).}
Martin v. Löwis5e163332001-02-27 18:36:56 +0000141\end{classdesc}
142
143\begin{classdesc}{WeakValueDictionary}{\optional{dict}}
Fred Drakeac154a12001-04-10 19:57:58 +0000144 Mapping class that references values weakly. Entries in the
145 dictionary will be discarded when no strong reference to the value
Fred Drake7408da52001-10-26 17:40:22 +0000146 exists any more.
Tim Peters5a5b2432003-11-21 22:20:57 +0000147
148 \note{Caution: Because a \class{WeakValueDictionary} is built on top
149 of a Python dictionary, it must not change size when iterating
150 over it. This can be difficult to ensure for a
151 \class{WeakValueDictionary} because actions performed by the
152 program during iteration may cause items in the dictionary
153 to vanish "by magic" (as a side effect of garbage collection).}
Fred Drakeebcf6a82001-02-01 05:20:20 +0000154\end{classdesc}
155
156\begin{datadesc}{ReferenceType}
157 The type object for weak references objects.
158\end{datadesc}
159
160\begin{datadesc}{ProxyType}
161 The type object for proxies of objects which are not callable.
162\end{datadesc}
163
164\begin{datadesc}{CallableProxyType}
165 The type object for proxies of callable objects.
166\end{datadesc}
167
168\begin{datadesc}{ProxyTypes}
169 Sequence containing all the type objects for proxies. This can make
170 it simpler to test if an object is a proxy without being dependent
171 on naming both proxy types.
172\end{datadesc}
173
Fred Drakeac154a12001-04-10 19:57:58 +0000174\begin{excdesc}{ReferenceError}
175 Exception raised when a proxy object is used but the underlying
Fred Drake8c2c3d32001-10-06 06:10:54 +0000176 object has been collected. This is the same as the standard
177 \exception{ReferenceError} exception.
Fred Drakeac154a12001-04-10 19:57:58 +0000178\end{excdesc}
179
Fred Drakeebcf6a82001-02-01 05:20:20 +0000180
181\begin{seealso}
182 \seepep{0205}{Weak References}{The proposal and rationale for this
183 feature, including links to earlier implementations
184 and information about similar features in other
185 languages.}
186\end{seealso}
187
188
189\subsection{Weak Reference Objects
190 \label{weakref-objects}}
191
192Weak reference objects have no attributes or methods, but do allow the
193referent to be obtained, if it still exists, by calling it:
194
195\begin{verbatim}
196>>> import weakref
197>>> class Object:
198... pass
199...
200>>> o = Object()
201>>> r = weakref.ref(o)
202>>> o2 = r()
203>>> o is o2
Martin v. Löwisccabed32003-11-27 19:48:03 +0000204True
Fred Drakeebcf6a82001-02-01 05:20:20 +0000205\end{verbatim}
206
207If the referent no longer exists, calling the reference object returns
Fred Drake21ae4f92004-02-03 20:55:15 +0000208\constant{None}:
Fred Drakeebcf6a82001-02-01 05:20:20 +0000209
210\begin{verbatim}
211>>> del o, o2
212>>> print r()
213None
214\end{verbatim}
215
216Testing that a weak reference object is still live should be done
Fred Drake5d548792001-08-03 03:50:28 +0000217using the expression \code{\var{ref}() is not None}. Normally,
Fred Drakeebcf6a82001-02-01 05:20:20 +0000218application code that needs to use a reference object should follow
219this pattern:
220
221\begin{verbatim}
Fred Drake7408da52001-10-26 17:40:22 +0000222# r is a weak reference object
223o = r()
Fred Drakeebcf6a82001-02-01 05:20:20 +0000224if o is None:
225 # referent has been garbage collected
226 print "Object has been allocated; can't frobnicate."
227else:
228 print "Object is still live!"
229 o.do_something_useful()
230\end{verbatim}
231
232Using a separate test for ``liveness'' creates race conditions in
233threaded applications; another thread can cause a weak reference to
Fred Drake7408da52001-10-26 17:40:22 +0000234become invalidated before the weak reference is called; the
Fred Drakeebcf6a82001-02-01 05:20:20 +0000235idiom shown above is safe in threaded applications as well as
236single-threaded applications.
237
238
Fred Drakecb839882001-03-28 21:15:41 +0000239\subsection{Example \label{weakref-example}}
240
241This simple example shows how an application can use objects IDs to
242retrieve objects that it has seen before. The IDs of the objects can
243then be used in other data structures without forcing the objects to
244remain alive, but the objects can still be retrieved by ID if they
245do.
246
Fred Drake42713102003-12-30 16:15:35 +0000247% Example contributed by Tim Peters.
Fred Drakecb839882001-03-28 21:15:41 +0000248\begin{verbatim}
249import weakref
250
Fred Drakeac154a12001-04-10 19:57:58 +0000251_id2obj_dict = weakref.WeakValueDictionary()
Fred Drakecb839882001-03-28 21:15:41 +0000252
253def remember(obj):
Fred Drake7408da52001-10-26 17:40:22 +0000254 oid = id(obj)
255 _id2obj_dict[oid] = obj
256 return oid
Fred Drakecb839882001-03-28 21:15:41 +0000257
Fred Drake7408da52001-10-26 17:40:22 +0000258def id2obj(oid):
259 return _id2obj_dict[oid]
Fred Drakecb839882001-03-28 21:15:41 +0000260\end{verbatim}
261
262
Fred Drakeebcf6a82001-02-01 05:20:20 +0000263\subsection{Weak References in Extension Types
264 \label{weakref-extension}}
265
266One of the goals of the implementation is to allow any type to
267participate in the weak reference mechanism without incurring the
268overhead on those objects which do not benefit by weak referencing
269(such as numbers).
270
271For an object to be weakly referencable, the extension must include a
Fred Drake7408da52001-10-26 17:40:22 +0000272\ctype{PyObject*} field in the instance structure for the use of the
Fred Drake5e0dfac2001-03-23 04:36:02 +0000273weak reference mechanism; it must be initialized to \NULL{} by the
274object's constructor. It must also set the \member{tp_weaklistoffset}
Fred Drakeebcf6a82001-02-01 05:20:20 +0000275field of the corresponding type object to the offset of the field.
Raymond Hettinger22c001b2002-08-07 16:18:54 +0000276Also, it needs to add \constant{Py_TPFLAGS_HAVE_WEAKREFS} to the
277tp_flags slot. For example, the instance type is defined with the
278following structure:
Fred Drakeebcf6a82001-02-01 05:20:20 +0000279
280\begin{verbatim}
281typedef struct {
282 PyObject_HEAD
283 PyClassObject *in_class; /* The class object */
Martin v. Löwis5e163332001-02-27 18:36:56 +0000284 PyObject *in_dict; /* A dictionary */
285 PyObject *in_weakreflist; /* List of weak references */
Fred Drakeebcf6a82001-02-01 05:20:20 +0000286} PyInstanceObject;
287\end{verbatim}
288
289The statically-declared type object for instances is defined this way:
290
291\begin{verbatim}
292PyTypeObject PyInstance_Type = {
293 PyObject_HEAD_INIT(&PyType_Type)
294 0,
Guido van Rossum14648392001-12-08 18:02:58 +0000295 "module.instance",
Fred Drakeebcf6a82001-02-01 05:20:20 +0000296
Fred Drakef66cb5d2001-06-22 17:20:29 +0000297 /* Lots of stuff omitted for brevity... */
Fred Drakeebcf6a82001-02-01 05:20:20 +0000298
Raymond Hettinger22c001b2002-08-07 16:18:54 +0000299 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_WEAKREFS /* tp_flags */
300 0, /* tp_doc */
301 0, /* tp_traverse */
302 0, /* tp_clear */
303 0, /* tp_richcompare */
304 offsetof(PyInstanceObject, in_weakreflist), /* tp_weaklistoffset */
Fred Drakeebcf6a82001-02-01 05:20:20 +0000305};
306\end{verbatim}
307
Raymond Hettinger22c001b2002-08-07 16:18:54 +0000308The type constructor is responsible for initializing the weak reference
309list to \NULL:
310
311\begin{verbatim}
Tim Peters5a5b2432003-11-21 22:20:57 +0000312static PyObject *
313instance_new() {
314 /* Other initialization stuff omitted for brevity */
Raymond Hettinger22c001b2002-08-07 16:18:54 +0000315
Tim Peters5a5b2432003-11-21 22:20:57 +0000316 self->in_weakreflist = NULL;
Raymond Hettinger22c001b2002-08-07 16:18:54 +0000317
Tim Peters5a5b2432003-11-21 22:20:57 +0000318 return (PyObject *) self;
319}
Raymond Hettinger22c001b2002-08-07 16:18:54 +0000320\end{verbatim}
321
Fred Drakeebcf6a82001-02-01 05:20:20 +0000322The only further addition is that the destructor needs to call the
Fred Drakef66cb5d2001-06-22 17:20:29 +0000323weak reference manager to clear any weak references. This should be
Fred Drake7408da52001-10-26 17:40:22 +0000324done before any other parts of the destruction have occurred, but is
325only required if the weak reference list is non-\NULL:
Fred Drakeebcf6a82001-02-01 05:20:20 +0000326
327\begin{verbatim}
328static void
329instance_dealloc(PyInstanceObject *inst)
330{
Fred Drake7408da52001-10-26 17:40:22 +0000331 /* Allocate temporaries if needed, but do not begin
Fred Drakef66cb5d2001-06-22 17:20:29 +0000332 destruction just yet.
Fred Drakeebcf6a82001-02-01 05:20:20 +0000333 */
334
Fred Drake7408da52001-10-26 17:40:22 +0000335 if (inst->in_weakreflist != NULL)
336 PyObject_ClearWeakRefs((PyObject *) inst);
Fred Drakeebcf6a82001-02-01 05:20:20 +0000337
Fred Drakede3d0602001-10-26 11:27:54 +0000338 /* Proceed with object destruction normally. */
Fred Drakeebcf6a82001-02-01 05:20:20 +0000339}
340\end{verbatim}