我正在阅读即将发布的asyncio
包的源代码。请注意,在该方法的末尾,有一条self = None
语句。它是做什么用的?
def _run(self):
try:
self._callback(*self._args)
except Exception as exc:
msg = 'Exception in callback {}{!r}'.format(self._callback,
self._args)
self._loop.call_exception_handler({
'message': msg,
'exception': exc,
'handle': self,
})
self = None # Needed to break cycles when an exception occurs.
我以为它会删除该实例,但是下面的测试并没有表明如此:
class K:
def haha(self):
self = None
a = K()
a.haha()
print(a) # a is still an instance
self
设置为None
会破坏循环引用?是哪些循环引用?” - satoru