Python避免使用“is”操作符比较integer数据
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操作符,应该使用==或!=。