python会缓存导入的文件吗?

时间:2019-08-04 13:10:43

标签: python

请考虑以下内容:

a.py

foo = 1

b.py

bar = 2

c.py

import a
kik = 3

d.py

import a
import c
def main():
    import b
main()
main()

  • a.py加载了多少次?
  • b.py加载了多少次?

更笼统地说,我想知道python如何处理导入的文件和函数/变量。

1 个答案:

答案 0 :(得分:3)

ab均被加载一次。导入模块时,其 content 会被缓存,因此当您再次加载相同的模块时,您不会调用导入的原始脚本,而是使用“ finder”完成的:

这可跨模块使用,因此,如果您有d.py的导入b,它将与c.py中的导入绑定到相同的缓存。


一些有趣的内置模块可以帮助您了解导入过程中发生的情况:

您可以利用导入系统使这些缓存无效,例如:

https://docs.python.org/3/library/importlib.html#importlib.import_module

  

如果要动态导入自解释程序开始执行以来创建的模块(例如,创建了Python源文件),则可能需要调用invalidate_caches()以便导入系统注意到新模块。


imp(和importlib py3.4 +)允许在导入后重新编译模块:

import imp
import a
imp.reload(a)