[英]module holding variables, mutable vs immutable
好的,这是情况。 我需要一组变量是全局变量,到目前为止,无需更改它们。 现在,有些情况发生在我需要执行以下操作时:
from config import some_var
some_var = new_var
此后,此更改在所有导入中均应可见。 现在,我尝试了一些虚拟模块:
所以在a.py中
x = 1
y = [1]
class A():
x = 1
y = [1]
在b.py中
from a import A, x, y
def change():
x = 2
y[0] = 2
A.x = 2
A.y = [2]
主要测试:
from a import A, x, y
from b import change
print x
print A.x
print y
print A.y
change()
print x
print A.x
print y
print A.y
输出为:
1 1 [1] [1] 1 2 [2] [2]
现在,我只想确保在进行任何仓促的更改之前,因为我在config中定义了很多变量,并且它们在很多地方都使用过,因此,如果我决定将它们全部包装在一个类中以使用它们,那将需要一些时间主要重构。
是否不可能以将来导入中会看到的方式更改模块中定义的变量? 我在我的示例中猜测y的更改有效,因为仅保留了对列表的引用,对吗?
您可以在模块级别更改变量,但是仅当您导入模块时才可以更改变量。
当您这样做时:
from a import A
所发生的一切只是在当前名称空间中分配了名称A
并将其设置为aA
的值。 如果你那么做
a = 2
本地名称只是反弹到2,但aA
名称的值保持不变。
但是,如果您这样做:
import a
a
现在是所述模块的引用,并且aA
是指模块内的实际变量。 所以现在:
a.A = 2
将更改该模块内部变量的值,该变量的值在任何地方都可见(只要其他位置也导入了该模块而不是对该名称的引用)。
在运行时更改变量的值不会更改从中导入模块的文件中存储的内容。 将来的导入将看到文件中的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.