[英]Imported a Python module; why does a reassigning a member in it also affect an import elsewhere?
我看到了我不理解的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
,因为我再次在test2.py
导入config.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
。 再次导入并不会改变事实,而不是为变量赋予新值 - 它不会将值“重置”到第一个值。
运行test1
时更改了test_var
的值,因此在运行test2
时它已经更改。
该变量不会为您导入它的每个文件重置。 这将是一切的价值。
不,您在config.py中使用test1()
更改为常量值。 这不会被重置。 由于您在test2()
打印它,因此再次打印修改后的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.