Этот вопрос является ответом на следующий пост SO:
В этом потоке ОП случайно импортирует свой собственный модуль вверху того же модуля. Почему это не вызывает бесконечный цикл?
Этот вопрос является ответом на следующий пост SO:
В этом потоке ОП случайно импортирует свой собственный модуль вверху того же модуля. Почему это не вызывает бесконечный цикл?
Модули импортируются только один раз. Python понимает, что он уже был импортирован, поэтому не делает этого снова.
См.: http://docs.python.org/tutorial/modules.html#more-on-modules
Когда Python встречает оператор import
, он сначала проверяет sys.modules
на наличие модуля, прежде чем что-либо делать.
import module
не перезагружает модуль, если он уже был импортирован
Я считаю, что python отслеживает, какие модули уже были импортированы, чтобы не тратить время на избыточный импорт. Каждый модуль можно импортировать только один раз.
Импорт в Python приводит к тому, что привязки пространства имен для импортируемого модуля помещаются в текущее пространство имен, если они еще не присутствуют. Если вы импортируете модуль дважды, он будет фактически импортирован (и, следовательно, выполнен) только один раз. Вот почему, когда вы импортируете модуль в себя, на самом деле ничего не происходит, так как привязки пространства имен уже присутствуют в текущем пространстве имен.