【发布时间】:2012-05-17 15:59:10
【问题描述】:
通常,如果我为变量分配一些值,然后检查它们的 id,我希望它们是相同的,因为 python 本质上只是给我的对象一个“名称”。这可以在下面的代码中看到:
>>> a = 3
>>> id(a)
19845928
>>> id(3)
19845928
问题是当我对“name”执行相同操作时
>>> __name__
'__main__'
>>> id(__name__)
19652416
>>> id('__main__')
19652448
id怎么可能不同,不应该一样吗?因为__name__ 也应该只是一个参考。
【问题讨论】:
-
(id("__main__") == id(__name__)) == True -
那为什么在空闲时显示不同??
-
@JakobBowyer:您的评论在我的 Cpython(和 pypy)上评估为 False,所以不要责怪 IDLE。
-
@JakobBowyer:这不是真的。不要混淆这个家伙。原因是虽然等值字符串可能具有相同的内存指针,但不能保证它们是相同的。确切的行为是未定义的。
-
这就是为什么成语是
__name__ == '__main__'。检查逻辑(字符串)相等,而不是对象标识。
标签: python