Is there a way to access the memory heap in Python? I’m interested in being able to access all of the objects allocated in memory of the running instance.
You can’t get direct access, but the
gc module should do most of what you want. A simple
gc.get_objects() call will return all the objects tracked by the collector. This isn’t everything since the CPython garbage collector is only concerned with potential reference cycles (so built-in types that can’t refer to other objects, e.g.
str, etc.) won’t appear in the resulting
list, but they’ll all be referenced by something in that
list (if they weren’t, their reference count would be zero and they’d have been disposed of).
Aside from that, you might get some more targeted use out of the
inspect module, especially stack frame inspection, using the
traceback module for “easy formatting” or manually digging into the semi-documented frame objects themselves, either of which would allow you to narrow the scope down to a particular active scope on the stack frame.
For the closest to the heap solution, you could use the
tracemalloc module to trace and record allocations as they happen, or the
pdb debugger to do live introspection from the outside (possibly adding
breakpoint() calls to your code to make it stop automatically when you reach that point to let you look around).