衆所周知,您可以通過del sys.modules[module]
刪除導入的模塊。所以我在想:這與改寫sys.modules
有什麼不同?一個有趣的事實是,重寫sys.modules
不能真正刪除一個模塊。「del sys.modules [模塊]」實際上做了什麼?
# a_module.py
print("a module imported")
然後
import sys
def func1():
import a_module
# del sys.modules['a_module']
sys.modules = {
k: v for k, v in sys.modules.items() if 'a_module' not in k}
print('a_module' not in sys.modules) # True
def func2():
import a_module
func1() # a module imported
func2() # no output here
如果我使用del sys.modules['a_module']
,呼籲func2()
還打印a module imported
,這意味着a_module
被成功刪除。
我的問題是:del sys.modules[module]
實際上做了什麼,除了更改字典?
謝謝。這是記錄在某處嗎?我不知道有「更多的參考」。 – laike9m
@ laike9m:很多是實現細節;我在源代碼中進行了深入的深入研究。其他Python實現可能會以不同方式處理解釋器狀態。 –
@ laike9m:例如,我注意到[PyInterpreterState]的C-API文檔(https://docs.python.org/3/c-api/init.html#c.PyInterpreterState)沒有提及的任何結構成員,並且'sys.modules'的文檔明確警告不要替換'sys.modules'引用。 –