擅长:python、mysql、java
<p>根据abarner的回答,我创建了以下“自己运行”示例,以演示我试图理解的行为:</p>
<pre><code>from types import ModuleType
from importlib import import_module
import sys
class MyModule(ModuleType):
def __del__(self):
print('I am being deleted')
if __name__ == '__main__':
x = import_module('urllib3')
x.__class__ = MyModule
del x
del sys.modules['urllib3'] # Comment this out and urllib3 will NOT be garbage collected before the script finishes
print('finishing')
</code></pre>
<p>按原样运行时的输出:</p>
<blockquote>
<p>I am being deleted</p>
<p>finishing</p>
</blockquote>
<p>带<code>del sys.modules['urllib3']</code>行注释掉的输出:</p>
<blockquote>
<p>finishing</p>
<p>I am being deleted</p>
</blockquote>
<p>很明显,当所有对模块的引用都被删除时,模块会被垃圾回收,除非所讨论的模块有点特殊,否则当应用程序和<code>sys.modules</code>中的引用被删除时,就会发生这种情况。在</p>