python模块导入两次吗?

tem*_*ame 3 python import python-3.x

如果我有一个文件运行import math,第二个文件也有import mathAND导入第一个文件,那么它是否会math在内存中加载模块两次?

war*_*iuc 6

当你这样做的import math时候会导入并输入sys.modules.然后import math检查是否math进入sys.modules并从中获取.

所以它只导入一次.

http://effbot.org/zone/import-confusion.htm

当Python导入模块时,它首先检查模块注册表(sys.modules)以查看模块是否已导入.如果是这种情况,Python会按现有模块对象使用.

否则,Python会做这样的事情:

  1. 创建一个新的空模块对象(这本质上是一个字典)
  2. 将该模块对象插入sys.modules字典中
  3. 加载模块代码对象(如有必要,首先编译模块)
  4. 在新模块的命名空间中执行模块代码对象.代码分配的所有变量都可以通过模块对象获得.

这意味着导入已经导入的模块相当便宜; Python只需要在字典中查看模块名称.