2

重複の可能性:
Python の「is」演算子が整数に対して予期しない動作をする

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を返します???

4

3 に答える 3

6

is整数の比較には使用しないでください。==代わりに使用してください。

is2 つの変数が同じオブジェクトを指しているかどうかをテストするためにのみ使用してください。Python では、小さい数値がインターレッドされ、同じ int リテラルに対して同じオブジェクトを取得することがよくありますが、常にではなく、より大きな数値に対してもそうではありません。

于 2012-11-06T18:07:54.013 に答える
4

-5これは、からまでのすべての整数256がキャッシュされるためです。したがって、それらについては取得することになりisますTrue

Python整数オブジェクトの実装を読む

于 2012-11-06T18:10:23.630 に答える
0

==整数を比較するには演算子を使用isし、Noneまたは同じオブジェクトと比較する場合は使用する必要があります。

>>> a = 257
>>> b = 257
>>> a is b
False
>>> a == b
True
于 2012-11-06T18:10:09.207 に答える