Python 导入之间的对象ID不一致

Python 导入之间的对象ID不一致,python,import,Python,Import,我注意到python解释器在使用跨文件导入时有一种奇怪的行为。下面的代码示例说明了这一点。类状态应该是相同的,因为它应该只实例化一次,但是打印它的ID表明对象实际上是不同的 这是一个bug还是有文档记录的特性 运行以下代码: # main.py print 'Entering Main' import sys print 'Importing Actions from Main. Actions is in modules:', 'actions' in sys.modules import

我注意到python解释器在使用跨文件导入时有一种奇怪的行为。下面的代码示例说明了这一点。类状态应该是相同的,因为它应该只实例化一次,但是打印它的ID表明对象实际上是不同的

这是一个bug还是有文档记录的特性

运行以下代码:

# main.py

print 'Entering Main'
import sys
print 'Importing Actions from Main. Actions is in modules:', 'actions' in sys.modules
import actions

class State (object):
  pass

print 'State ID in Main', id(State)

if __name__ == '__main__':
  print 'OK'
print 'End of Main!'
生成以下输出:

进入Main
从主服务器导入操作。操作在模块中:False
输入操作
从操作导入状态
进入Main
从主服务器导入操作。动作在模块中:True
主目录34782944中的状态ID
干完了
行动34782944中的状态ID
行动结束
主目录34817664中的状态ID
好的
干完了


如果您还打印了
状态
,您将看到区别(
)。这只会因为特殊的
\uuuuu main\uuuu
名称空间而发生,因此只会在直接运行脚本时发生。没错!我在发了这条消息后考虑了一下。你能把你的答案设计成一篇博文吗?这样我就可以把这个问题标记为已接受。如果你也
打印状态
,你就会看到区别(
)。这只会因为特殊的
\uuuuu main\uuuu
名称空间而发生,因此只会在直接运行脚本时发生。没错!我在发了这条消息后考虑了一下。你们能把你们的答案设计成一个帖子吗?这样我就可以把这个问题标记为已接受。
# actions.py
print 'Entering Actions'

print 'Importing State from Actions'
from main import State

print 'State ID in Actions', id(State)
print 'End of Actions!'