繁体   English   中英

导入了Python模块; 为什么重新分配其中的成员也会影响其他地方的进口?

[英]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_vartest1.py ,然后就再次打印它使用test2.py 再次导入并不会改变事实,而不是为变量赋予新值 - 它不会将值“重置”到第一个值。

运行test1时更改了test_var的值,因此在运行test2时它已经更改。

该变量不会为您导入它的每个文件重置。 这将是一切的价值。

不,您在config.py中使用test1()更改为常量值。 这不会被重置。 由于您在test2()打印它,因此再次打印修改后的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM