我希望能够获得对类的任何现有对象实例的引用元组.我想出的是:
import gc
def instances(theClass):
instances = []
gc.collect()
for i in gc.get_referrers(theClass):
if isinstance(i, theClass):
instances.append(i)
return tuple(instances)
如果在Python intepreter提示符下输入上述代码,则可以执行以下操作:
>>> class MyClass(object):
>>> pass
>>> c = MyClass()
>>> instances(MyClass)
(<__main__.myclass object at>,)
万岁.但是,似乎gc.collect()实际上并没有在函数内部做任何事情:
>>> del c
>>> instances(MyClass)
(<__main__.myclass object at>,)
但是gc.collect()在函数外部工作:
>>> del c
>>> gc.collect()
>>> instances(MyClass)
()
所以,我的问题是:如何让gc.collect()在函数内部实际执行完整集合(为什么它不能正常工作)?有推论的问题:是否有更好的方法来实现返回元组的相同目标,该元组具有对特定类的对象实例的引用?
注意:这都是在Python 2.7.3中尝试过的.我还没有在Python 3中尝试过它,但我的目标是拥有一个可以工作的功能(或者至少可以用2to3转换).
编辑(下面的答案)澄清问题实际上是关于交互模式,而不是gc.collect()函数本身.