String to int conversion bug?

时间:2012-11-06 18:06:00

标签: python

  

可能重复:
  Python “is” operator behaves unexpectedly with integers

在python 2.6.6中,当我使用int()将字符串转换为数字时,如果字符串为257或更大,则下面的代码行为不正确。

curr = int("256")  
myint = int("256")  
if curr is myint:  
    print("true")  
else:  
    print("false")  

这返回true,这是正确的

curr = int("257")  
myint = int("257")  
if curr is myint:  
    print("true")  
else:  
    print("false")  

这会返回false ???

3 个答案:

答案 0 :(得分:6)

您不应使用is来比较整数。请改用==

is只应用于测试两个变量是否指向同一个对象。在Python中,小数字是内置的,你经常为同一个int文字获取相同的对象,但并不总是,而不是更大的数字。

答案 1 :(得分:4)

这是因为-5256的所有整数都已缓存,因此您将为is获取True

阅读Python integer objects implementation

答案 2 :(得分:0)

您应该使用==运算符来比较整数,并在与无或相同对象进行比较时使用is

>>> a = 257
>>> b = 257
>>> a is b
False
>>> a == b
True