2014-01-19 93 views
3

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

+0

否............. – thefourtheye

+0

Python导入不会导入多次,如果您想再次导入,您可以使用[reload()](http://docs.python。 org/2/library/functions.html#reload) –

+2

@KobiK - 'reload'已在Python 3.x中移除。在Python 3.2或更高版本中,您可以使用['imp.reload'](http://docs.python.org/3.2/library/imp.html#imp.reload)。 – iCodez

回答

6

当你做import math它被导入并放入sys.modules。接下来你做import math检查是否mathsys.modules并从那里取得。

所以它只输入一次。

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

当Python导入一个模块,它首先检查模块注册表 (sys.modules中),看看是否该模块已被导入。如果这是 大小写,Python将使用现有的模块对象。

否则,Python做这样的事情:

  1. 创建一个新的空模块对象(这基本上是一个字典)
  2. 插入字典sys.modules该模块对象
  3. 装入模块代码对象(如有必要,先编译模块)
  4. 在新模块的名称空间中执行模块代码对象。代码分配的所有变量将通过模块对象提供。

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

0

模块被导入一次。第二次,

import math 

遇到,所发生的只是已导入的模块绑定到导入模块的名称空间中的名称数学。

0

Python模块不会导入多次,因此运行两次import语句命令将不会重新加载模块。

如果您希望重新加载它,您必须执行reload语句。

+0

这可能是一个评论,看上面。 –