我刚刚阅读了关于“is运算符的意外结果”的内容,这是因为Python在-5到256之间缓存数字。
这个问题在以下两个链接中讨论过: "is" operator behaves unexpectedly with integers 和 "is" and "id" in Python 3.5 当我运行其中一个示例时,在Python IDLE和Python IDE(我使用的是Jetbrains Pycharm专业版-5.0.4)之间会得到不同的结果。
在使用Python IDLE时,这是结果:
使用Pycharm 5.0.4时,这是结果:
这怎么可能呢? 我已经重新检查了,我的项目的Python解释器在两种情况下完全相同(都是Python 3.5.1)。 不确定这是我做错了什么,希望有人能解释一下。
编辑: 我知道'a'是'b' == true当且仅当id(a) == id(b),并且您可以像评论中提到的那样进行检查。也许我应该更清楚,我不明白的是一个IDE怎么会有不同的行为?我认为(如果我错了,请纠正我),IDE只是使用外部编译器/解释器的用户友好环境,因此它们独立于这些IDE(例如,pycharm不仅支持Python,我可以运行带有C编译器或Java等的Eclipse等所有这些都不是IDE的一部分)。
谢谢, 艾伦。
这个问题在以下两个链接中讨论过: "is" operator behaves unexpectedly with integers 和 "is" and "id" in Python 3.5 当我运行其中一个示例时,在Python IDLE和Python IDE(我使用的是Jetbrains Pycharm专业版-5.0.4)之间会得到不同的结果。
在使用Python IDLE时,这是结果:
a = 1000
b = 1000
print (a is b) # prints False
使用Pycharm 5.0.4时,这是结果:
a = 1000
b = 1000
print (a is b) # prints True
这怎么可能呢? 我已经重新检查了,我的项目的Python解释器在两种情况下完全相同(都是Python 3.5.1)。 不确定这是我做错了什么,希望有人能解释一下。
编辑: 我知道'a'是'b' == true当且仅当id(a) == id(b),并且您可以像评论中提到的那样进行检查。也许我应该更清楚,我不明白的是一个IDE怎么会有不同的行为?我认为(如果我错了,请纠正我),IDE只是使用外部编译器/解释器的用户友好环境,因此它们独立于这些IDE(例如,pycharm不仅支持Python,我可以运行带有C编译器或Java等的Eclipse等所有这些都不是IDE的一部分)。
谢谢, 艾伦。
a = 1000; b = 100 + 900
或其他结果为整数1000的操作来支持你的猜测。这样就不会被优化为引用同一个对象,我想。 - Byte Commandera = 1000; b = None ; c = 1000
也会使a is c
为 True,你可能想看看我的回答。 - Tadhg McDonald-Jensen