【发布时间】:2021-01-25 12:45:46
【问题描述】:
我想要一个以全局方式运行的 var 副本:即它的存储存在一次,并且两个模块中对它的所有引用都读取和写入相同的存储。我怎样才能总共使用两个模块来获得这种行为?
这是我的尝试,但失败得很惨:
# module1
#!python
import module2
var = 1
def touch_var():
global var
print(var, id(var))
var = 3
print(var, id(var))
def main():
global var
print(var, id(var))
var = 2
print(var, id(var))
module2.do_func()
print(var, id(var))
touch_var()
print(var, id(var))
if __name__ == '__main__':
main()
# module2
#!python
import module1
def do_func():
print(module1.var, id(module1.var))
module1.touch_var()
print(module1.var, id(module1.var))
module1.var = 4
print(module1.var, id(module1.var))
输出是:
1 17006627360
2 17006627392
1 17006627360
1 17006627360
3 17006627424
3 17006627424
4 17006627456
2 17006627392
2 17006627392
3 17006627424
3 17006627424
我已经尝试过使用可变类型的赋值:
#!python
import module2
var = [1]
def touch_var():
global var
print(var, id(var))
var = [3]
print(var, id(var))
def main():
global var
print(var, id(var))
var = [2]
print(var, id(var))
module2.do_func()
print(var, id(var))
touch_var()
print(var, id(var))
if __name__ == '__main__':
main()
#!python
import module1
def do_func():
print(module1.var, id(module1.var))
module1.touch_var()
print(module1.var, id(module1.var))
module1.var = [4]
print(module1.var, id(module1.var))
我得到了这个结果:
[1] 7696579790600
[2] 7696579792072
[1] 7696579790664
[1] 7696579790664
[3] 7696579790600
[3] 7696579790600
[4] 7696579790664
[2] 7696579792072
[2] 7696579792072
[3] 7696579790600
[3] 7696579790600
我已经尝试分配给可变类型的元素:
#!python
import module2
var = [1]
def touch_var():
global var
print(var, id(var))
var[0] = 3
print(var, id(var))
def main():
global var
print(var, id(var))
var[0] = 2
print(var, id(var))
module2.do_func()
print(var, id(var))
touch_var()
print(var, id(var))
if __name__ == '__main__':
main()
#!python
import module1
def do_func():
print(module1.var, id(module1.var))
module1.touch_var()
print(module1.var, id(module1.var))
module1.var[0] = 4
print(module1.var, id(module1.var))
我得到了这个结果:
[1] 7696579790600
[2] 7696579790600
[1] 7696579790664
[1] 7696579790664
[3] 7696579790664
[3] 7696579790664
[4] 7696579790664
[2] 7696579790600
[2] 7696579790600
[3] 7696579790600
[3] 7696579790600
所有三个都给出相同的结果。
我想要的输出是这样的:
1
2
2
2
3
3
4
4
4
3
3
为什么我得到我得到的?我怎样才能得到我想要的?
请注意,这不是“Python:在其中的模块和类之间共享全局变量”的副本,正如@prune 所假设的那样,因为在那个答案中,问题是由使用“from module import *”引起的,它我不在这里做;另一个答案是问题来自使用不可变类型,我已经证明这不是问题。此外,我的标准之一是使用两个文件来解决此问题,但该问题使用三个文件。
【问题讨论】:
标签: python python-import main