重新导入模块后,原模块中的变量为何未显示初始值?
为什么重新导入模块后变量值没恢复?
Python的模块导入机制是只在第一次导入时加载模块文件到内存,后续再执行import语句时,不会重新读取磁盘上的模块文件,而是直接复用内存中已经存在的模块对象。
结合你的代码来看:
- 第一次
import foo,Python把foo.py的内容加载到内存,创建了foo模块的实例,此时foo.var是初始值7。 - 执行
foo.var = 9时,是直接修改了内存中这个foo模块实例的变量值。 - 第二次
import foo,Python检测到内存里已经存在foo模块的实例,直接复用它,所以打印出的foo.var还是修改后的9,不会重新读取foo.py里的初始值7。
如果想恢复模块的初始状态,需要使用importlib.reload()方法(Python 3.4+),示例代码如下:
import importlib import foo # 修改变量后 foo.var = 9 print(foo.var) # 输出9 # 重新加载模块 importlib.reload(foo) print(foo.var) # 输出7
内容的提问来源于stack exchange,提问作者Sumant W W
相关产品推荐
相关产品推荐

