不同模块之间的全局变量共享行为不同

时间:2018-07-04 16:46:57

标签: python

在config.py中,我有:

config = 0
#config = []
def init_config():
    global config
    config = 1
    #config.append("1")
    print("init", config)

在main.py中,我有:

from config import init_config
from config import config

def main():
    init_config()
    print("main", config)

if __name__ == '__main__':
    main()

并且config.py和main.py都位于同一目录中。运行python main.py之后,我得到了:

init 1
main 0

但是,如果我改用config.py中的注释行,则会得到:

init ['1']
main ['1']

那为什么会发生差异呢? (Python 3.5.5)

1 个答案:

答案 0 :(得分:1)

config.py导入后,变量config成为config.config的单独副本,位于main.py的命名空间中。您应该将import config作为模块,然后将变量config作为模块config的属性来访问:

import config

def main():
    config.init_config()
    print("main", config.config)

if __name__ == '__main__':
    main()