← Все вопросы

Про разницу между is и == в Python

Задан 2 месяца назад58 просмотров2 ответа
1

В Python есть два способа сравнения: == и is. Почему для чисел 5 == 5 и 5 is 5 часто дают True, а для больших чисел вроде 1000 == 1000 — True, но 1000 is 1000 может дать False? Когда нужно использовать is, а когда == ?

2 ответа

2

== сравнивает значения, is — идентичность: «это буквально один и тот же объект в памяти», а не «два одинаковых».

С маленькими числами интерпретатор хитрит: CPython при старте создаёт объекты для целых от -5 до 256 и переиспользует их. Поэтому 5 is 5 — True: обе пятёрки указывают на один закэшированный объект. 1000 в кэш не входит, и два разных объекта со значением 1000 через is могут дать False. Именно «могут»: это деталь реализации, в одних условиях интерпретатор склеит константы, в других нет. Свежие версии Python на такие сравнения даже ругаются SyntaxWarning.

Отсюда правило: значения сравниваем только через ==. is — для случаев, где важна именно идентичность, а это на практике почти всегда x is None.

0

Запомните как мантру: is — только с None, всё остальное — ==. Этого правила хватит очень надолго. А фокусы вроде 1000 is 1000 — любимый вопрос на собеседованиях; в реальном коде так писать просто не нужно.

Ваш ответ

, чтобы ответить на вопрос.