Ответ 1
Python кэширует импортированные модули. Второй вызов import
не перезагружает файл.
Я вижу поведение Python, которое я не понимаю. Рассмотрим этот макет:
project
| main.py
| test1.py
| test2.py
| config.py
main.py:
import config as conf
import test1
import test2
print(conf.test_var)
test1.test1()
print(conf.test_var)
test2.test2()
test1.py:
import config as conf
def test1():
conf.test_var = 'test1'
test2.py:
import config as conf
def test2():
print(conf.test_var)
config.py:
test_var = 'initial_value'
поэтому python main.py
произведет:
initial_value
test1
test1
Меня смущает последняя строка. Я думал, что он снова напечатает initial_value
, потому что я снова импортирую config.py
в test2.py
, и я подумал, что изменения, которые я сделал на предыдущем шаге, будут перезаписаны. Я что-то не понимаю?
Python кэширует импортированные модули. Второй вызов import
не перезагружает файл.
test2.py
import config as conf
def test2():
print(id(conf.test_var))
print(conf.test_var)
test1.py
import config as conf
def test1():
conf.test_var = 'test1'
print(id(conf.test_var))
Измените код следующим образом.
И запустите main.py
initial_value
140007892404912
test1
140007892404912
test1
Итак, вы можете видеть, что в обоих случаях вы меняете значение одной и той же переменной. См. Эти id
.
Вы отредактировали test_var
в test1.py
, а затем снова напечатали его, используя test2.py
. Импорт снова не изменяет тот факт, что вы назначили новое значение переменной - это не "reset" значение для первого.
Вы изменили значение test_var
при запуске test1
, и поэтому оно было изменено при запуске test2
.
Эта переменная не будет reset для каждого файла, в который вы ее импортируете. Это будет одно значение для всего.
нет, вы меняете с помощью test1()
в config.py значение константы.
Это не будет сброшено. Поскольку вы печатаете его в test2()
, измененное значение снова печатается.