python 3.6及更早版本与3.7中不可变对象的“is”行为不一致
作者:互联网
当我注意到python(v3.6和更早版本)和(v3.7)之间的行为不一致时,我向我的学生介绍了操作符.
启动python shell并运行:
5/2 is 2.5
要么:
(1, 2, 3) is (1, 2, 3)
在v3.6.X中,两者都得到False,但在v3.7中,它们都是True.
我的期望是结果应该是True,因为我认为不可变数值对象(或它们的元组)只有一个实例.
似乎至少我的想法在以前的Python版本中是不对的.
有谁知道解释这种新行为的变化是什么?
解决方法:
我不确定原因和来源,但我的猜测是这与内联优化有关.
如果您为此值分配变量,则身份检查将导致False,与之前相同.
>>> 5/2 is 2.5
True
>>> a = 5/2
>>> a is 2.5
False
关于新折叠优化的有趣注释.由于python是“所有运行时”,因此没有办法优先处理某些事情,但它会尽力解决,尽可能多地解析范围:
>>> a = 3.14
>>> b = 3.14
>>> a is b
False
>>> a = 3.14; b = 3.14
>>> a is b
True
标签:python,python-3-x,internals 来源: https://codeday.me/bug/20190717/1485982.html