如果我导入模块,模块名称将同时显示在sys.modules和globals().如果我再次删除它,它将被删除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)
就像任何其他 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 在下次导入时重新加载它。
| 归档时间: |
|
| 查看次数: |
5205 次 |
| 最近记录: |