Find all references to an object in python Find all references to an object in python python python

Find all references to an object in python


Python's gc module has several useful functions, but it sounds like gc.get_referrers() is what you're looking for. Here's an example:

import gcdef foo():    a = [2, 4, 6]    b = [1, 4, 7]    l = [a, b]    d = dict(a=a)    return l, dl, d = foo()r1 = gc.get_referrers(l[0])r2 = gc.get_referrers(l[1])print r1print r2

When I run that, I see the following output:

[[[2, 4, 6], [1, 4, 7]], {'a': [2, 4, 6]}][[[2, 4, 6], [1, 4, 7]]]

You can see that the first line is l and d, and the second line is just l.

In my brief experiments, I've found that the results are not always this clean. Interned strings and tuples, for example, have more referrers than you would expect.


Python's standard library has gc module containing garbage collector API. One of the function you possible want to have is

gc.get_objects()

This function returns list of all objects currently tracked by garbage collector. The next step is to analyze it.

If you know the object you want to track you can use sys module's getrefcount function:

>>> x = object()>>> sys.getrefcount(x)2>>> y = x>>> sys.getrefcount(x)3