Модули Python можно было рассмотреть как одиночные элементы..., неважно, сколько раз Вы импортируете их, они инициализируются только однажды, таким образом, лучше сделать:
import MyLib
import ReallyBigLib
Соответствующая документация в операторе импорта:
https://docs.python.org/2/reference/simple_stmts.html#the-import-statement
Однажды название модуля известен (если иначе не определено, термин “module” отнесется и к пакетам и к модулям), ища модуль, или пакет может начаться. Проверенное первое место является sys.modules, кэшем всех модулей, которые были импортированы ранее. Если модуль найден там тогда, он используется на шаге (2) импорта.
импортированные модули кэшируются в sys.modules:
Это - словарь, который отображает имена модуля к модулям, которые были уже загружены. Этим можно управлять для принуждения перезагрузки модулей и других приемов. Обратите внимание, что удаление модуля из этого словаря не является тем же как называющий перезагрузку () на соответствующем объекте модуля.
Как другие указали, Python ведет внутренний список всех модулей, которые были импортированы. При импорте модуля впервые модуль (сценарий) выполняется в его собственном пространстве имен, пока конец, внутренний список не обновляется, и выполнение продолжается после оператора импорта.
Попытка этот код:
# module/file a.py
print "Hello from a.py!"
import b
# module/file b.py
print "Hello from b.py!"
import a
нет никакого цикла: существует только поиск кэша.
>>> import b
Hello from b.py!
Hello from a.py!
>>> import a
>>>
Одна из красот Python - то, как все передает к выполнению сценария в пространстве имен.
Это не имеет никакого существенного значения. Если большой модуль был уже загружен, второй импорт в Вашем втором примере не делает ничего кроме добавления 'ReallyBigLib' к текущему пространству имен.
Внутренний реестр импортированных модулей sys.modules
словарь, который отображает имена модуля к объектам модуля. Можно посмотреть там для наблюдения всех модулей, которые в настоящее время импортируются.
можно также вытянуть некоторые полезные приемы (если Вам нужно к) monkeying с sys.modules
- например, добавление Ваших собственных объектов как псевдомодули, которые могут быть импортированы другими модулями.
Это - тот же performancewise. Еще нет никакого JIT-компилятора в Python.
WARNING: Python does not guarantee that module will not be initialized twice. I've stubled upon such issue. See discussion: http://code.djangoproject.com/ticket/8193