Чому 256 is 256 - True, а 257 is 257 - не завжди
У пайтоні є оператор is, який перевіряє не рівність значень, а те, чи це один і той самий обʼєкт у памʼяті. І тут ховається несподіванка:
a = 256
b = 256
a is b # True
a = 257
b = 257
a is b # False
Значення однакові, а результат різний. Причина в тому, що CPython при старті створює й тримає в кеші всі малі цілі від -5 до 256. Вони використовуються постійно, тож інтерпретатор не робить нові обʼєкти щоразу - віддає ті самі.
Число 257 у кеш не потрапляє, тому кожне таке присвоєння - новий обʼєкт. Звідси False.
І ще нюанс: якщо написати 257 is 257 в одному рядку чи в одній функції, компілятор може сам згорнути константи, і вийде True. Тобто поведінка залежить від того, де саме стоїть код.
Висновок простий: is для чисел використовувати не треба взагалі. Він про ідентичність обʼєкта, а не про значення. Для порівняння чисел завжди ==.
1 · 153 · СообщениеЧому 256 is 256 - True, а 257 is 257 - не завжди
28 сентября 2026Рядом в ленте
это сообщение
P