Python避免使用“is”操作符比较integer数据

时间:2022-06-01 16:42:58

Python的is操作符实际上是比较的是对象的id值,id(obj)。

a is b

实际可以理解为

id(a) == id(b)

Python里保存了一个整型数组作为缓存,范围为-5到256,如果使用此范围的数据赋值,那么实际使用引用此数组的数据,所以获取这些范围数据的id值,同一个数是相同的。

Python3.6

>>>a=-5
>>>id(a)
1782077072
>>>b=-5
>>>id(b)
1782077072
>>>a=-6
>>>id(a)
42132128
>>>b=-6
>>>id(b)
42132144

可见a和b为-5时,id值同等,当a和b为-6时,id值是不想等的。

所以,比较两个整型需要避免使用is操作符,应该使用==或!=。

参考: Plain Integer Objects