Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当模块导入自身时,全局变量会发生什么变化_Python_Import_Module_Scope_Global - Fatal编程技术网

Python 当模块导入自身时,全局变量会发生什么变化

Python 当模块导入自身时,全局变量会发生什么变化,python,import,module,scope,global,Python,Import,Module,Scope,Global,我有以下模块: 这个mod.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

我有以下模块:

这个mod.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”

当模块在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

如果您直接运行了
thismod.py
,则不会。但如果它是从另一个脚本导入的,则是。