是什么使两个python文件导入同一个配置文件并相互影响?

是什么使两个python文件导入同一个配置文件并相互影响?,python,import,Python,Import,也许这个斜杠不能解释我的问题,这里有一个例子 有三个python文件,demo.py、fun.py、config.py 在config.py文件中: 在fun.py中: 在demo.py中: 运行demo.py,结果如下: 0.1 1 我很好奇为什么fun.py可以更改demo.py中的值,尽管它们导入了相同的配置文件。您回答了自己的问题:它们导入了相同的配置文件 请记住,您没有更改demo.py或fun.py中的值。相反,当您执行cfg.TRAIN.LEARNING_RATE=0.1时,您正

也许这个斜杠不能解释我的问题,这里有一个例子

有三个python文件,demo.py、fun.py、config.py

在config.py文件中:

在fun.py中:

在demo.py中:

运行demo.py,结果如下:

0.1
1

我很好奇为什么fun.py可以更改demo.py中的值,尽管它们导入了相同的配置文件。

您回答了自己的问题:它们导入了相同的配置文件

请记住,您没有更改demo.py或fun.py中的值。相反,当您执行cfg.TRAIN.LEARNING_RATE=0.1时,您正在更改内存cfg中的变量,该变量与config.py绑定

由于demo.py和fun.py都导入相同的config.py,解释器将整个内容加载到内存中一次,并让其他两个文件访问存储在内存中的cfg变量。换句话说,它们都在操作同一个变量,并且各自独立访问


程序从不输出0.001的原因是,虽然cfg.TRAIN.LEARNING\u RATE在您第一次将config.py加载到内存时就初始化为该值,但在将其重新指定为0.1之前,您从未实际打印过该值。

它不像您建议的那样明显,如果我将文件更改为:config.py file:var=0.001 fun.py:from config import var def function:printvar var var=1 demo.py:from config import var from fun import function var=0.1 function printvar I get:UnboundLocalError:在添加赋值之前引用的局部变量“var”fun.py的全局变量给出了预期结果。
from config import cfg
def function():
    print(cfg.TRAIN.LEARNING_RATE)
    cfg.TRAIN.LEARNING_RATE = 1
    pass
from config import cfg
from fun import function

cfg.TRAIN.LEARNING_RATE = 0.1

function()

print(cfg.TRAIN.LEARNING_RATE)
0.1
1