身份比较 - 比较同一对象返回false

时间:2017-02-11 09:50:12

标签: python

有人可以在下面回答(输出来自IDLE或检查python shell - python 2.7)。对于1),2)和3),4)我正在做同样的操作,但得到不同的结果。

1)>>> A = 0

2)>>> a是0

3)>>> A = 0.0

4)>>> a是0.0

5)>>> 0.0是0.0

为什么4)是假的?

2 个答案:

答案 0 :(得分:1)

python is运算符用于测试两个变量是否指向同一个对象。

来自文档:

  

运算符是和不是对象标识的测试:当且仅当x和y是同一个对象时,x是y才为真。

例如。

a = 0.0

如果您执行b = a,然后使用b is a进行跟进。它将返回True。

现在,如果你执行a = 0.0b = 0.0然后尝试b is a,它将返回False,因为现在a和b是指向两个不同对象的两个变量。

答案 1 :(得分:1)

这是因为CPython中对-5256之间的任何整数的优化都会返回对已存在对象的引用,这意味着a是对{的引用{1}},因此它们具有相同的0。对于像id()这样的浮点数没有这样的优化,因此在赋值时创建了一个新对象(意思是0.0)。

参考:https://docs.python.org/2/c-api/int.html