这是我的问题。我启动一个新的python控制台并键入以下内容:
import gc
meeseeks_instance = False
class Meeseeks(object):
def __init__(self):
gc.collect()
print('Look at me!')
def __del__(self):
print('Mission accomplished!')
globals()['meeseks_instance'] = False
def __new__(cls):
gc.collect()
if globals()['meeseeks_instance']:
raise Exception('Theres already a Meeseeks!')
globals()['meeseeks_instance'] = True
return super().__new__(cls)
现在,如果我键入:
>>> mymeeseeks = Meeseeks()
Look at me!
>>> del mymeeseeks
Mission accomplished!
太棒了。现在:
>>> Meeseeks()
Look at me!
<Meeseeks object at 0x043DE290>
对象没有被分配,所以它是不可访问的,应该被垃圾收集;无论如何,垃圾收集似乎还没有运行。但是,如果我强制它,对象是正确收集的:
>>> gc.collect()
Mission accomplished!
0
麻烦来了。如果我尝试实例化两个Meeseeks
,则__new__
中的显式垃圾回收不会触发,并且引发异常:
>>> Meeseeks()
Look at me!
<Meeseeks object at 0x043B0990>
>>> Meeseeks()
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "<input>", line 18, in __new__
Exception: Theres already a Meeseeks!
为什么会这样?我怎样才能使尝试实例化一个新的Meeseeks强制垃圾收集以前的、不可访问的Meeseeks?你知道吗
您在
__del__
中输入了meeseks_instance
,但我认为python垃圾收集的默认行为已经如您所愿工作了。你知道吗相关问题 更多 >
编程相关推荐