все Python 3sysпонятие
sys.modules
модули
Словарь всех загруженных модулей {имя: module}. Кэш импортов Python. Можно удалить модуль для перезагрузки.
Синтаксис
sys.modules # dict[str, ModuleType]
Именно из-за этого кэша тело модуля выполняется ровно один раз: повторный import в той же сессии не увидит правок в файле. Но удаление ключа из sys.modules модуль не выгружает — старые классы и объекты продолжают жить в уже созданных ссылках, и после нового импорта isinstance начнёт неожиданно возвращать False. Для перезагрузки берите importlib.reload(), а надёжнее всего — просто перезапустить процесс.
Примеры
import sys
import os
print('os' in sys.modules) # → True
print(type(sys.modules['os'])) # → <class 'module'>
print(len(sys.modules)) # → кол-во загруженных модулей
del sys.modules['os'] # убрали из кэша — сам модуль из памяти не выгружен
import os as os2
print(os2 is os) # → False — тело модуля выполнено заново, старый объект жив
import sys
import json
first = sys.modules['json']
import json # повторный import берёт модуль из кэша
print(sys.modules['json'] is first) # → True — тело модуля не выполнялось заново
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности