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

mri*_*rip 9 python namespaces module

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

如果我执行,from abc import xyz那么它将整个模块读abc入一个新的命名空间,然后将xyz全局命名空间中的变量绑定到同一个对象,该对象xyz在这个新创建的命名空间中被绑定到模块被读入的对象中.至少这是我的理解.

abc在那之后读入的命名空间会发生什么?我假设它存在于某个地方,因为xyz可能会访问该命名空间中的其他对象.可以abc以某种方式访问这个"鬼" 命名空间吗?

而且,我假设如果我这样做

from abc import xyz
from abc import fgh
Run Code Online (Sandbox Code Playgroud)

那么只有一个"ghost" abc命名空间,所以如果xyzfgh修改相同的全局变量abc,那么它只会有一个副本.那是对的吗?

Bre*_*arn 6

模块对象存储在sys.modules.所以,如果你这样做from abc import xyz,那么sys.modules['abc']就会给你abc模块对象.