В прошлом году на comp.lang.python было очень хорошее обсуждение этого вопроса. Он очень хорошо отвечает на ваш вопрос.
Импорт довольно прост. Просто помните следующее:
'import' и 'from xxx import yyy' являются исполняемыми операциями. Они выполняются, когда запущенная программа достигает этой строки.
Если модуль отсутствует в sys.modules, тогда импорт создает новую запись модуля в sys.modules и затем выполняет код в модуле. Он не возвращает управление вызывающему модулю до тех пор, пока выполнение не завершится.
Если модуль существует в sys.modules, тогда импорт просто возвращает этот модуль, завершил ли он выполнение. Вот почему циклический импорт может возвращать модули, которые кажутся частично пустыми.
Наконец, исполняемый скрипт работает в модуле с именем __main__, при импорте скрипта под собственным именем будет создан новый модуль, не связанный с __main __.
Возьмите эту партию вместе, и вы не должны получать никаких сюрпризов при импорте модулей.
Я нажимал «запустить до курсора» вместо «запустить» на панели отладчика. Doh!