Почему в Python происходит непредвиденное поведение?
>>> a = 256
>>> b = 256
>>> a is b
True # This is an expected result
>>> a = 257
>>> b = 257
>>> a is b
False # What happened here? Why is this False?
>>> 257 is 257
True # Yet the literal numbers compare properly
Я использую Python 2.5.2. Попробовав несколько разных версий Python, похоже, что Python 2.3.3 показывает вышеприведенное поведение между 99 и 100.
Исходя из вышесказанного, я могу предположить, что Python внутренне реализуется так, что "маленькие" целые числа хранятся иначе, чем большие целые числа, а оператор is
может отличить. Почему протекающая абстракция? Что является лучшим способом сравнения двух произвольных объектов, чтобы увидеть, одинаковы ли они, если я заранее не знаю, являются ли они числами или нет?