我有以下模块:
thismod.py
var = 99
def local():
var = 0 # Change local var
def glob1():
global var # Declare global (normal)
var += 1 # Change global var var = 100
def glob2():
var = 0 # Change local var
import thismod # Import myself
thismod.var += 1 # Change global var
def glob3():
var = 0 # Change local var
import sys # Import system table
glob = sys.modules['thismod'] # Get module object (or use __name__)
glob.var += 1 # Change global var
def test():
print(var)
local(); glob1(); glob2(); glob3()
print(var)
driver.py
import thismod
thismod.test()
我的问题是在glob2中,所以glob1显然将var更改为100.当模块在glob2中导入自身时,它是否没有得到全局变量的新副本" var"?我不明白** thismod.var + = 1 **如何改变原来的" var"。
答案 0 :(得分:2)
当模块在glob2中导入自身时,是否没有得到全局变量“var”的新副本?
不。执行import foo
时,如果先前已导入foo
,则会发生的情况是使用现有引用。
import sys
import foo
print foo is sys.modules['foo']
oldfoo = foo
import foo
print foo is sys.modules['foo']
print foo is oldfoo