Если модуль импортируется в Python дважды, фактически он будет загружен и выполнен только один раз за время жизни текущего интерпретатора Python. Python использует внутренний механизм для отслеживания уже импортированных модулей.
Когда вы делаете import module_name
:
sys.modules
. sys.modules
это словарь, который хранит все уже импортированные модули.module_name
уже находится в sys.modules
, Python просто возвращает ссылку на существующий модуль, избегая повторной загрузки и выполнения кода модуля.sys.modules
, Python выполняет следующие действия:
module_name.py
(или его скомпилированную версию module_name.pyc
или module_name.pyo
) в директориях, указанных в sys.path
.sys.modules
с ключом 'module_name'
.Важно отметить: Даже если код модуля выполняется только один раз, при каждом импорте создается новое имя в текущем пространстве имен, указывающее на тот же самый объект модуля. То есть, если у вас есть несколько файлов, импортирующих один и тот же модуль, каждый файл получит свое собственное имя, ссылающееся на единственный экземпляр модуля в памяти.
Пример:
# module_a.py
print("Модуль A загружен")
variable_a = 10
# main.py
import module_a
import module_a
print(module_a.variable_a) # Выведет 10
В данном примере "Модуль A загружен" будет напечатано только один раз, даже несмотря на то, что import module_a
вызывается дважды.
Последствия: