##
3.3.1 弱参照オブジェクト

弱参照オブジェクトは属性あるいはメソッドを持ちません。しかし、リファレントがまだ存在するならば、呼び出すことでそのリファレントを取得できるようにします:

    >>> import weakref
    >>> class Object:
    ...     pass
    ...
    >>> o = Object()
    >>> r = weakref.ref(o)
    >>> o2 = r()
    >>> o is o2
    True

リファレントがもはや存在しないならば、参照オブジェクトの呼び出しは`None`を返します:

    >>> del o, o2
    >>> print r()
    None

弱参照オブジェクトがまだ生きているかどうかのテストは、式`ref() is not None`を用いて行われます。通常、参照オブジェクトを使う必要があるアプリケーションコードはこのパターンに従います:

    # rは弱参照オブジェクト
    o = r()
    if o is None:
        # リファレントがガーベジコレクトされた
        print "Object has been allocated; can't frobnicate."
    else:
        print "Object is still live!"
        o.do_something_useful()

``生存性(liveness)''のテストを個々に行うと、スレッド化されたアプリケーションにおいて競合状態を作り出します。弱参照が呼び出される前に、他のスレッドは弱参照が無効になる原因となり得ます。上で示したイディオムは、シングルスレッド化されたアプリケーションと同じくスレッド化されたアプリケーションにおいて安全です。