[英]How to get the list of all initialized objects and function definitions alive in python?
Say that in the python shell (IDLE) I have defined some classes, functions, variables.假设在 python shell (IDLE) 中我定义了一些类、函数、变量。 Also created objects of the classes.
还创建了类的对象。 Then I deleted some of the objects and created some others.
然后我删除了一些对象并创建了一些其他对象。 At a later point in time, how can I get to know what are the currently active objects, variables, and methods definitions active in the memory?
在稍后的某个时间点,我如何才能知道内存中当前活动的对象、变量和方法定义是什么?
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.
:-) 仅当您启动 Python 时就超过 4000。
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). (请注意,Python 中的“全局”并不是真正的全局。为此,您需要上面的
gc.get_objects()
,并且如上所述,您不太可能觉得有用)。
The function gc.get_objects()
will not find all objects, eg numpy arrays will not be found.函数
gc.get_objects()
不会找到所有对象,例如不会找到 numpy 数组。
import numpy as np
import gc
a = 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/GetAllObjects
import 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 np
import gc
a = 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!
How about dir()
which will output instantiated objects as a list?将实例化对象作为列表输出的
dir()
怎么样? I just used this just now: [x for x in dir() if x.lower().startswith('y')]
我刚刚用过这个:
[x for x in dir() if x.lower().startswith('y')]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.