执行`from abc import xyz`模块`abc`在哪里?

时间:2016-04-07 15:53:56

标签: python module namespaces

关于Python内部的问题。如果我执行import abc,那么Python会将模块读入新的命名空间,并将全局命名空间中的变量abc绑定到指向新的命名空间。

如果我执行from abc import xyz,它会将整个模块abc读入一个新的命名空间,然后将全局命名空间中的变量xyz绑定到绑定到{{{ 1}}在这个新创建的命名空间中,模块被读入。至少这是我的理解。

在此之后读取xyz的命名空间会发生什么?我假设它存在于某个地方,因为abc可能会访问该命名空间中的其他对象。可以以某种方式访问​​这个“ghost”xyz命名空间吗?

另外,我假设如果我这样做

abc

然后只有一个“ghost”from abc import xyz from abc import fgh 命名空间,因此如果abcxyz修改fgh中的同一个全局变量,则只会有一个副本它的。这是对的吗?

1 个答案:

答案 0 :(得分:6)

模块对象存储在sys.modules中。因此,如果您执行from abc import xyz,那么sys.modules['abc']将为您提供abc模块对象。