sys.modules和globals()中的模块名称

Hon*_*Zhu 9 python

如果我导入模块,模块名称将同时显示在sys.modulesglobals().如果我再次删除它,它将被删除globals(),但仍然驻留在sys.modules.为什么会这样?

import mymodule
'mymodule' in globals()   # True
'mymodule' in sys.modules # True
del mymodule
'mymodule' in globals()   # False
'mymodule' in sys.modules # Still True, why?
Run Code Online (Sandbox Code Playgroud)

我还发现了以下不同之处:

from mypackage import mymodule
'mypackage' in sys.modules            # True
'mymodule'  in sys.modules            # False !
'mypackage.mymodule' in sys.modules   # also True !
Run Code Online (Sandbox Code Playgroud)

而答案是互补的globals():

'mypackage' in sys.modules            # False
'mymodule'  in sys.modules            # True 
'mypackage.mymodule' in sys.modules   # False
Run Code Online (Sandbox Code Playgroud)

phi*_*hag 4

就像任何其他 Python 对象一样,模块将继续存在,直到不再有对其的引用。换句话说,sys.modules它的行为就像一个普通的字典,并且

import mymodule
lst = {mymodule.__name__: mymodule}
'mymodule' in globals()   # True
'mymodule' in lst         # True
del mymodule
'mymodule' in globals()   # False
'mymodule' in lst         # Still True
Run Code Online (Sandbox Code Playgroud)

sys.modules仅就进口声明进行咨询。您可以从中删除模块,sys.modules以便 Python 在下次导入时重新加载它。