Ответ
Ответ не найден
Ответ 18+ 🔞
А, ну это же про то, как в Python'е всё по-разному считается, да? Ёпта, классика жанра. Сидишь такой, пишешь себе код, всё логично, а потом бац — и нихуя не сходится. Сам от себя охуеваешь.
Вот смотри, есть у нас два числа: 256 и 257. Казалось бы, соседние, хуй с горы. Берём, сравниваем через is — оператор идентичности, который не значения смотрит, а одни и те же объекты в памяти или нет.
a = 256
b = 256
print(a is b) # True
Всё чётко, True. А теперь, блядь, делаем то же самое с 257.
x = 257
y = 257
print(x is y) # False
И тут тебе — False! Удивление пиздец! Какого хуя? Ты же вроде одно и то же число написал, а Python тебе говорит: «Нет, браток, это два разных объекта, живи с этим».
А весь прикол, чувак, в том, что Python — хитрая жопа. Он заранее, при запуске, создаёт и кеширует в памяти маленькие целые числа, где-то от -5 до 256. Это типа оптимизация, чтоб не плодить сущностей без нужды. Поэтому когда ты пишешь a = 256 и b = 256, они оба просто ссылаются на один и тот же, уже готовый, объект в кеше. is это и проверяет — ссылаются ли переменные на один адрес в памяти. И да, ссылаются.
Но как только ты вылезаешь за пределы этого кеша, например, в 257 — тут уже пошла настоящая, честная жизнь. Каждое присваивание = 257 создаёт новый, отдельный объект в памяти. Поэтому x и y — это два разных объекта с одинаковым значением. is видит разные адреса — и выдаёт False.
А вот == (оператор равенства) работает по-другому, он умный. Ему похуй на адреса в памяти, он смотрит только на значения внутри объектов.
print(x == y) # True
Вот он и говорит: «Да чё вы спорите, значения-то одинаковые, True».
Так что мораль, блядь, какая? А мораль простая, как палка: is — это про «тот же самый», а == — про «равный по значению». Для чисел, строк, булевых значений почти всегда нужно ==. is оставь для особых случаев, типа проверки на None (if var is None), потому что None в памяти всегда один. Или когда реально нужно понять, не две ли это ссылки на один список, а не на два одинаковых.
А то начнёшь везде is пихать, а потом будешь сидеть и чесать репу: «Ну почему у меня 257 не равно 257, ёб твою мать?». А потому что доверия к is для сравнения чисел — ебать ноль. Используй по назначению, и будет тебе счастье.