Uncollectable garbage
---------------------

Objects that have a ``__del__`` method cannot be collected by the garbage
collector if they participate in a cycle, prior to Python 3.4.

    >>> class Nondestructible(list):
    ...     def __del__(self):
    ...         pass

    >>> x = Nondestructible()
    >>> y = []
    >>> z = []
    >>> x.append(y)
    >>> y.append(z)
    >>> z.append(x)

When you remove all other references to these, they end up in ``gc.garbage``.

    >>> import objgraph
    >>> del x, y, z
    >>> import gc
    >>> _ = gc.collect()
    >>> len(gc.garbage)
    1

We highlight these objects by showing the existence of a ``__del__``.

    >>> objgraph.show_backrefs(objgraph.by_type('Nondestructible'),
    ...                        filename='finalizers.png') # doctest: +NODES_VARY
    Graph written to ....dot (8 nodes)
    Image generated as finalizers.png

.. figure:: finalizers.png

Note that classes that *define* a ``__del__`` method do not have this
indicator

    >>> objgraph.show_refs(Nondestructible, max_depth=1,
    ...                    filename='class-with-finalizers.png')
    Graph written to ....dot (5 nodes)
    Image generated as class-with-finalizers.png

.. figure:: class-with-finalizers.png

