blob: fda27d2a0c22b3834c42104881d041eb498f4f9f [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
Fred Drake7408da52001-10-26 17:40:22 +000017In the discussion which follows, the term \dfn{referent} means the
18object which is referred to by a weak reference.
19
Fred Drakeebcf6a82001-02-01 05:20:20 +000020XXX --- need to say more here!
21
22Not all objects can be weakly referenced; those objects which do
Fred Drake5e0dfac2001-03-23 04:36:02 +000023include class instances, functions written in Python (but not in C),
24and methods (both bound and unbound). Extension types can easily
Fred Drakeebcf6a82001-02-01 05:20:20 +000025be made to support weak references; see section \ref{weakref-extension},
26``Weak References in Extension Types,'' for more information.
27
Fred Drakeebcf6a82001-02-01 05:20:20 +000028
29\begin{funcdesc}{ref}{object\optional{, callback}}
Fred Drake7408da52001-10-26 17:40:22 +000030 Return a weak reference to \var{object}. The original object can be
31 retrieved by calling the reference object if the referent is still
32 alive; if the referent is no longer alive, calling the reference
33 object will cause \code{None} to be returned. If \var{callback} is
Fred Drakeebcf6a82001-02-01 05:20:20 +000034 provided, it will be called when the object is about to be
35 finalized; the weak reference object will be passed as the only
36 parameter to the callback; the referent will no longer be available.
Fred Drakeebcf6a82001-02-01 05:20:20 +000037
38 It is allowable for many weak references to be constructed for the
39 same object. Callbacks registered for each weak reference will be
40 called from the most recently registered callback to the oldest
41 registered callback.
42
43 Exceptions raised by the callback will be noted on the standard
Andrew M. Kuchlinge7d7e6c2001-02-14 02:39:11 +000044 error output, but cannot be propagated; they are handled in exactly
Fred Drakeebcf6a82001-02-01 05:20:20 +000045 the same way as exceptions raised from an object's
46 \method{__del__()} method.
Martin v. Löwis5e163332001-02-27 18:36:56 +000047
48 Weak references are hashable if the \var{object} is hashable. They
49 will maintain their hash value even after the \var{object} was
50 deleted. If \function{hash()} is called the first time only after
51 the \var{object} was deleted, the call will raise
52 \exception{TypeError}.
53
Fred Drake3a2c4622001-10-26 03:00:39 +000054 Weak references support tests for equality, but not ordering. If
Fred Drake7408da52001-10-26 17:40:22 +000055 the referents are still alive, two references have the same
Fred Drakeb03d0cc2001-11-26 21:39:40 +000056 equality relationship as their referents (regardless of the
Fred Drake7408da52001-10-26 17:40:22 +000057 \var{callback}). If either referent has been deleted, the
58 references are equal only if the reference objects are the same
59 object.
Fred Drakeebcf6a82001-02-01 05:20:20 +000060\end{funcdesc}
61
Fred Drakeebcf6a82001-02-01 05:20:20 +000062\begin{funcdesc}{proxy}{object\optional{, callback}}
63 Return a proxy to \var{object} which uses a weak reference. This
64 supports use of the proxy in most contexts instead of requiring the
65 explicit dereferencing used with weak reference objects. The
66 returned object will have a type of either \code{ProxyType} or
67 \code{CallableProxyType}, depending on whether \var{object} is
68 callable. Proxy objects are not hashable regardless of the
69 referent; this avoids a number of problems related to their
70 fundamentally mutable nature, and prevent their use as dictionary
Fred Drakee7ec1ef2001-05-10 17:22:17 +000071 keys. \var{callback} is the same as the parameter of the same name
Fred Drakeebcf6a82001-02-01 05:20:20 +000072 to the \function{ref()} function.
73\end{funcdesc}
74
75\begin{funcdesc}{getweakrefcount}{object}
76 Return the number of weak references and proxies which refer to
77 \var{object}.
78\end{funcdesc}
79
80\begin{funcdesc}{getweakrefs}{object}
81 Return a list of all weak reference and proxy objects which refer to
82 \var{object}.
83\end{funcdesc}
84
Martin v. Löwis5e163332001-02-27 18:36:56 +000085\begin{classdesc}{WeakKeyDictionary}{\optional{dict}}
Fred Drakeac154a12001-04-10 19:57:58 +000086 Mapping class that references keys weakly. Entries in the
87 dictionary will be discarded when there is no longer a strong
88 reference to the key. This can be used to associate additional data
89 with an object owned by other parts of an application without adding
90 attributes to those objects. This can be especially useful with
91 objects that override attribute accesses.
Martin v. Löwis5e163332001-02-27 18:36:56 +000092\end{classdesc}
93
94\begin{classdesc}{WeakValueDictionary}{\optional{dict}}
Fred Drakeac154a12001-04-10 19:57:58 +000095 Mapping class that references values weakly. Entries in the
96 dictionary will be discarded when no strong reference to the value
Fred Drake7408da52001-10-26 17:40:22 +000097 exists any more.
Fred Drakeebcf6a82001-02-01 05:20:20 +000098\end{classdesc}
99
100\begin{datadesc}{ReferenceType}
101 The type object for weak references objects.
102\end{datadesc}
103
104\begin{datadesc}{ProxyType}
105 The type object for proxies of objects which are not callable.
106\end{datadesc}
107
108\begin{datadesc}{CallableProxyType}
109 The type object for proxies of callable objects.
110\end{datadesc}
111
112\begin{datadesc}{ProxyTypes}
113 Sequence containing all the type objects for proxies. This can make
114 it simpler to test if an object is a proxy without being dependent
115 on naming both proxy types.
116\end{datadesc}
117
Fred Drakeac154a12001-04-10 19:57:58 +0000118\begin{excdesc}{ReferenceError}
119 Exception raised when a proxy object is used but the underlying
Fred Drake8c2c3d32001-10-06 06:10:54 +0000120 object has been collected. This is the same as the standard
121 \exception{ReferenceError} exception.
Fred Drakeac154a12001-04-10 19:57:58 +0000122\end{excdesc}
123
Fred Drakeebcf6a82001-02-01 05:20:20 +0000124
125\begin{seealso}
126 \seepep{0205}{Weak References}{The proposal and rationale for this
127 feature, including links to earlier implementations
128 and information about similar features in other
129 languages.}
130\end{seealso}
131
132
133\subsection{Weak Reference Objects
134 \label{weakref-objects}}
135
136Weak reference objects have no attributes or methods, but do allow the
137referent to be obtained, if it still exists, by calling it:
138
139\begin{verbatim}
140>>> import weakref
141>>> class Object:
142... pass
143...
144>>> o = Object()
145>>> r = weakref.ref(o)
146>>> o2 = r()
147>>> o is o2
1481
149\end{verbatim}
150
151If the referent no longer exists, calling the reference object returns
152\code{None}:
153
154\begin{verbatim}
155>>> del o, o2
156>>> print r()
157None
158\end{verbatim}
159
160Testing that a weak reference object is still live should be done
Fred Drake5d548792001-08-03 03:50:28 +0000161using the expression \code{\var{ref}() is not None}. Normally,
Fred Drakeebcf6a82001-02-01 05:20:20 +0000162application code that needs to use a reference object should follow
163this pattern:
164
165\begin{verbatim}
Fred Drake7408da52001-10-26 17:40:22 +0000166# r is a weak reference object
167o = r()
Fred Drakeebcf6a82001-02-01 05:20:20 +0000168if o is None:
169 # referent has been garbage collected
170 print "Object has been allocated; can't frobnicate."
171else:
172 print "Object is still live!"
173 o.do_something_useful()
174\end{verbatim}
175
176Using a separate test for ``liveness'' creates race conditions in
177threaded applications; another thread can cause a weak reference to
Fred Drake7408da52001-10-26 17:40:22 +0000178become invalidated before the weak reference is called; the
Fred Drakeebcf6a82001-02-01 05:20:20 +0000179idiom shown above is safe in threaded applications as well as
180single-threaded applications.
181
182
Fred Drakecb839882001-03-28 21:15:41 +0000183\subsection{Example \label{weakref-example}}
184
185This simple example shows how an application can use objects IDs to
186retrieve objects that it has seen before. The IDs of the objects can
187then be used in other data structures without forcing the objects to
188remain alive, but the objects can still be retrieved by ID if they
189do.
190
191% Example contributed by Tim Peters <tim_one@msn.com>.
192\begin{verbatim}
193import weakref
194
Fred Drakeac154a12001-04-10 19:57:58 +0000195_id2obj_dict = weakref.WeakValueDictionary()
Fred Drakecb839882001-03-28 21:15:41 +0000196
197def remember(obj):
Fred Drake7408da52001-10-26 17:40:22 +0000198 oid = id(obj)
199 _id2obj_dict[oid] = obj
200 return oid
Fred Drakecb839882001-03-28 21:15:41 +0000201
Fred Drake7408da52001-10-26 17:40:22 +0000202def id2obj(oid):
203 return _id2obj_dict[oid]
Fred Drakecb839882001-03-28 21:15:41 +0000204\end{verbatim}
205
206
Fred Drakeebcf6a82001-02-01 05:20:20 +0000207\subsection{Weak References in Extension Types
208 \label{weakref-extension}}
209
210One of the goals of the implementation is to allow any type to
211participate in the weak reference mechanism without incurring the
212overhead on those objects which do not benefit by weak referencing
213(such as numbers).
214
215For an object to be weakly referencable, the extension must include a
Fred Drake7408da52001-10-26 17:40:22 +0000216\ctype{PyObject*} field in the instance structure for the use of the
Fred Drake5e0dfac2001-03-23 04:36:02 +0000217weak reference mechanism; it must be initialized to \NULL{} by the
218object's constructor. It must also set the \member{tp_weaklistoffset}
Fred Drakeebcf6a82001-02-01 05:20:20 +0000219field of the corresponding type object to the offset of the field.
220For example, the instance type is defined with the following structure:
221
222\begin{verbatim}
223typedef struct {
224 PyObject_HEAD
225 PyClassObject *in_class; /* The class object */
Martin v. Löwis5e163332001-02-27 18:36:56 +0000226 PyObject *in_dict; /* A dictionary */
227 PyObject *in_weakreflist; /* List of weak references */
Fred Drakeebcf6a82001-02-01 05:20:20 +0000228} PyInstanceObject;
229\end{verbatim}
230
231The statically-declared type object for instances is defined this way:
232
233\begin{verbatim}
234PyTypeObject PyInstance_Type = {
235 PyObject_HEAD_INIT(&PyType_Type)
236 0,
Guido van Rossum14648392001-12-08 18:02:58 +0000237 "module.instance",
Fred Drakeebcf6a82001-02-01 05:20:20 +0000238
Fred Drakef66cb5d2001-06-22 17:20:29 +0000239 /* Lots of stuff omitted for brevity... */
Fred Drakeebcf6a82001-02-01 05:20:20 +0000240
241 offsetof(PyInstanceObject, in_weakreflist) /* tp_weaklistoffset */
242};
243\end{verbatim}
244
245The only further addition is that the destructor needs to call the
Fred Drakef66cb5d2001-06-22 17:20:29 +0000246weak reference manager to clear any weak references. This should be
Fred Drake7408da52001-10-26 17:40:22 +0000247done before any other parts of the destruction have occurred, but is
248only required if the weak reference list is non-\NULL:
Fred Drakeebcf6a82001-02-01 05:20:20 +0000249
250\begin{verbatim}
251static void
252instance_dealloc(PyInstanceObject *inst)
253{
Fred Drake7408da52001-10-26 17:40:22 +0000254 /* Allocate temporaries if needed, but do not begin
Fred Drakef66cb5d2001-06-22 17:20:29 +0000255 destruction just yet.
Fred Drakeebcf6a82001-02-01 05:20:20 +0000256 */
257
Fred Drake7408da52001-10-26 17:40:22 +0000258 if (inst->in_weakreflist != NULL)
259 PyObject_ClearWeakRefs((PyObject *) inst);
Fred Drakeebcf6a82001-02-01 05:20:20 +0000260
Fred Drakede3d0602001-10-26 11:27:54 +0000261 /* Proceed with object destruction normally. */
Fred Drakeebcf6a82001-02-01 05:20:20 +0000262}
263\end{verbatim}