Документация для метода execfile: здесь . Поскольку не указана конкретная версия python, я предполагаю, что речь идет о 2.6.2.
В документации для execfile указано, что она принимает три аргумента: имя файла, словарь (для локальных переменных) и второй словарь (для глобальных переменных). Если вы опустите второй и третий аргументы, содержимое файла запускается в своей собственной области (например, в модуле), которая захватывает локальные переменные, но предоставляет глобальные переменные родительской области. Поэтому, если файл создает локальные переменные, они не будут сохранены, но глобальные переменные будут сохранены.
Однако запуск execfile без указания локального и глобального контекстов означает, что файл видит локальные и глобальные переменные вызывающей функции. Для кода, которому вы не доверяете, это следует считать дырой в безопасности. Как правило, целесообразно создать два словаря для локальных и глобальных переменных и передать их в качестве второго и третьего аргументов в execfile. Если вы храните эти словари где-нибудь (например, в другом словаре, указанном по имени файла), то вы можете повторно использовать эти словари при следующем обращении к файлу, что сохранит объекты, созданные файлом, живыми.
Итак, вкратце: execfile не совсем как импорт. Но вы можете сохранить словари местных жителей и глобалов, чтобы результаты повторного вызова могли быть снова использованы.