How to get the list of all initialized objects and function definitions alive in python?
Yes.
>>> import gc>>> gc.get_objects()
Not that you'll find that useful. There is a lot of them. :-) Over 4000 just when you start Python.
Possibly a bit more useful is all the variables active locally:
>>> locals()
And the one active globally:
>>> globals()
(Note that "globally" in Python isn't really global as such. For that, you need the gc.get_objects()
above, and that you are unlikely to ever find useful, as mentioned).
The function gc.get_objects()
will not find all objects, e.g. numpy arrays will not be found.
import numpy as npimport gca = np.random.rand(100)objects = gc.get_objects()print(any[x is a for x in objects])# will not find the numpy array
You will need a function that expands all objects, as explained here
# code from https://utcc.utoronto.ca/~cks/space/blog/python/GetAllObjectsimport gc# Recursively expand slist's objects# into olist, using seen to track# already processed objects.def _getr(slist, olist, seen): for e in slist: if id(e) in seen: continue seen[id(e)] = None olist.append(e) tl = gc.get_referents(e) if tl: _getr(tl, olist, seen)# The public function.def get_all_objects(): """Return a list of all live Python objects, not including the list itself.""" gcl = gc.get_objects() olist = [] seen = {} # Just in case: seen[id(gcl)] = None seen[id(olist)] = None seen[id(seen)] = None # _getr does the real work. _getr(gcl, olist, seen) return olist
Now we should be able to find most objects
import numpy as npimport gca = np.random.rand(100)objects = get_all_objects()print(any[x is a for x in objects])# will return True, the np.ndarray is found!