\section{\module{weakref} ---
         Weak references}

\declaremodule{extension}{weakref}
\modulesynopsis{Support for weak references and weak dictionaries.}
\moduleauthor{Fred L. Drake, Jr.}{fdrake@acm.org}
\moduleauthor{Neil Schemenauer}{nas@arctrix.com}
\moduleauthor{Martin von L\"owis}{martin@loewis.home.cs.tu-berlin.de}
\sectionauthor{Fred L. Drake, Jr.}{fdrake@acm.org}

\versionadded{2.1}


The \module{weakref} module allows the Python programmer to create
\dfn{weak references} to objects.

In the discussion which follows, the term \dfn{referent} means the
object which is referred to by a weak reference.

XXX --- need to say more here!

Not all objects can be weakly referenced; those objects which do
include class instances, functions written in Python (but not in C),
and methods (both bound and unbound).  Extension types can easily
be made to support weak references; see section \ref{weakref-extension},
``Weak References in Extension Types,'' for more information.


\begin{funcdesc}{ref}{object\optional{, callback}}
  Return a weak reference to \var{object}.  The original object can be
  retrieved by calling the reference object if the referent is still
  alive; if the referent is no longer alive, calling the reference
  object will cause \code{None} to be returned.  If \var{callback} is
  provided, it will be called when the object is about to be
  finalized; the weak reference object will be passed as the only
  parameter to the callback; the referent will no longer be available.

  It is allowable for many weak references to be constructed for the
  same object.  Callbacks registered for each weak reference will be
  called from the most recently registered callback to the oldest
  registered callback.

  Exceptions raised by the callback will be noted on the standard
  error output, but cannot be propagated; they are handled in exactly
  the same way as exceptions raised from an object's
  \method{__del__()} method.
  
  Weak references are hashable if the \var{object} is hashable.  They
  will maintain their hash value even after the \var{object} was
  deleted.  If \function{hash()} is called the first time only after
  the \var{object} was deleted, the call will raise
  \exception{TypeError}.
  
  Weak references support tests for equality, but not ordering.  If
  the referents are still alive, two references have the same
  equalality relationship as their referents (regardless of the
  \var{callback}).  If either referent has been deleted, the
  references are equal only if the reference objects are the same
  object.
\end{funcdesc}

\begin{funcdesc}{proxy}{object\optional{, callback}}
  Return a proxy to \var{object} which uses a weak reference.  This
  supports use of the proxy in most contexts instead of requiring the
  explicit dereferencing used with weak reference objects.  The
  returned object will have a type of either \code{ProxyType} or
  \code{CallableProxyType}, depending on whether \var{object} is
  callable.  Proxy objects are not hashable regardless of the
  referent; this avoids a number of problems related to their
  fundamentally mutable nature, and prevent their use as dictionary
  keys.  \var{callback} is the same as the parameter of the same name
  to the \function{ref()} function.
\end{funcdesc}

\begin{funcdesc}{getweakrefcount}{object}
  Return the number of weak references and proxies which refer to
  \var{object}.
\end{funcdesc}

\begin{funcdesc}{getweakrefs}{object}
  Return a list of all weak reference and proxy objects which refer to
  \var{object}.
\end{funcdesc}

\begin{classdesc}{WeakKeyDictionary}{\optional{dict}}
  Mapping class that references keys weakly.  Entries in the
  dictionary will be discarded when there is no longer a strong
  reference to the key.  This can be used to associate additional data
  with an object owned by other parts of an application without adding
  attributes to those objects.  This can be especially useful with
  objects that override attribute accesses.
\end{classdesc}

\begin{classdesc}{WeakValueDictionary}{\optional{dict}}
  Mapping class that references values weakly.  Entries in the
  dictionary will be discarded when no strong reference to the value
  exists any more.
\end{classdesc}

\begin{datadesc}{ReferenceType}
  The type object for weak references objects.
\end{datadesc}

\begin{datadesc}{ProxyType}
  The type object for proxies of objects which are not callable.
\end{datadesc}

\begin{datadesc}{CallableProxyType}
  The type object for proxies of callable objects.
\end{datadesc}

\begin{datadesc}{ProxyTypes}
  Sequence containing all the type objects for proxies.  This can make
  it simpler to test if an object is a proxy without being dependent
  on naming both proxy types.
\end{datadesc}

\begin{excdesc}{ReferenceError}
  Exception raised when a proxy object is used but the underlying
  object has been collected.  This is the same as the standard
  \exception{ReferenceError} exception.
\end{excdesc}


\begin{seealso}
  \seepep{0205}{Weak References}{The proposal and rationale for this
                feature, including links to earlier implementations
                and information about similar features in other
                languages.}
\end{seealso}


\subsection{Weak Reference Objects
            \label{weakref-objects}}

Weak reference objects have no attributes or methods, but do allow the
referent to be obtained, if it still exists, by calling it:

\begin{verbatim}
>>> import weakref
>>> class Object:
...     pass
...
>>> o = Object()
>>> r = weakref.ref(o)
>>> o2 = r()
>>> o is o2
1
\end{verbatim}

If the referent no longer exists, calling the reference object returns
\code{None}:

\begin{verbatim}
>>> del o, o2
>>> print r()
None
\end{verbatim}

Testing that a weak reference object is still live should be done
using the expression \code{\var{ref}() is not None}.  Normally,
application code that needs to use a reference object should follow
this pattern:

\begin{verbatim}
# r is a weak reference object
o = r()
if o is None:
    # referent has been garbage collected
    print "Object has been allocated; can't frobnicate."
else:
    print "Object is still live!"
    o.do_something_useful()
\end{verbatim}

Using a separate test for ``liveness'' creates race conditions in
threaded applications; another thread can cause a weak reference to
become invalidated before the weak reference is called; the
idiom shown above is safe in threaded applications as well as
single-threaded applications.


\subsection{Example \label{weakref-example}}

This simple example shows how an application can use objects IDs to
retrieve objects that it has seen before.  The IDs of the objects can
then be used in other data structures without forcing the objects to
remain alive, but the objects can still be retrieved by ID if they
do.

% Example contributed by Tim Peters <tim_one@msn.com>.
\begin{verbatim}
import weakref

_id2obj_dict = weakref.WeakValueDictionary()

def remember(obj):
    oid = id(obj)
    _id2obj_dict[oid] = obj
    return oid

def id2obj(oid):
    return _id2obj_dict[oid]
\end{verbatim}


\subsection{Weak References in Extension Types
            \label{weakref-extension}}

One of the goals of the implementation is to allow any type to
participate in the weak reference mechanism without incurring the
overhead on those objects which do not benefit by weak referencing
(such as numbers).

For an object to be weakly referencable, the extension must include a
\ctype{PyObject*} field in the instance structure for the use of the
weak reference mechanism; it must be initialized to \NULL{} by the
object's constructor.  It must also set the \member{tp_weaklistoffset}
field of the corresponding type object to the offset of the field.
For example, the instance type is defined with the following structure:

\begin{verbatim}
typedef struct {
    PyObject_HEAD
    PyClassObject *in_class;       /* The class object */
    PyObject      *in_dict;        /* A dictionary */
    PyObject      *in_weakreflist; /* List of weak references */
} PyInstanceObject;
\end{verbatim}

The statically-declared type object for instances is defined this way:

\begin{verbatim}
PyTypeObject PyInstance_Type = {
    PyObject_HEAD_INIT(&PyType_Type)
    0,
    "instance",

    /* Lots of stuff omitted for brevity... */

    offsetof(PyInstanceObject, in_weakreflist) /* tp_weaklistoffset */
};
\end{verbatim}

The only further addition is that the destructor needs to call the
weak reference manager to clear any weak references.  This should be
done before any other parts of the destruction have occurred, but is
only required if the weak reference list is non-\NULL:

\begin{verbatim}
static void
instance_dealloc(PyInstanceObject *inst)
{
    /* Allocate temporaries if needed, but do not begin
       destruction just yet.
     */

    if (inst->in_weakreflist != NULL)
        PyObject_ClearWeakRefs((PyObject *) inst);

    /* Proceed with object destruction normally. */
}
\end{verbatim}
