Поскольку Python кэширует модули в sys.modules
, чтобы предотвратить (дорогой, медленный) процесс поиска модулей, выполняющийся дольше, чем необходимо.
Можно удалить модуль изsys.modules
если вам нужно, хотя reload
также может работать.
Более подробно, когда вы import mymodule
происходят разные вещи.Вдобавок ко мне, и предполагая, что mymodule
не является одним из модулей, встроенных в исполняемый файл интерпретатора:
Интерпретатор запускает некоторый сложный код, чтобы найти файл, содержащий mymodule
(это может быть mymodule.py
, mymodule.pyc
или mymodule.pyd
- или, может быть, что-то еще, о чем я не подумал. Это просматривает текущий каталог, sys.path и другие места тоже.
Расположенный таким образом файл лексируется, анализируется и компилируется (при необходимости) в байт-коды интерпретатора.
Скомпилированный модуль выполняется, давая модульobject.
Объект модуля вставлен в sys.modules.
Объект модуля привязан к локальной переменной, указанной в import
утверждение.
(Выше приведено очень грубое приближение, основанное на том, что я помню о механике, стоящей за import
. Это, вероятно, неправильно в важных и тонких отношениях.)
Обратите внимание, что привязка объекта модуля к locНа самом деле, имя является довольно малой частью реального процесса импорта.Удаление привязки имени путем выполнения del mymodule
не влияет на остальную часть импорта.