Короткий ответ == проверяет равенство значений двух объектов, а is — ссылаются ли переменные на один и тот же объект в памяти. Для сравнения содержимого используют ==, а is — для синглтонов вроде None. Как это работает подробнее Результаты операторов могут расходиться: одинаковые значения часто хранятся в разных объектах. Равенство значений. == сравнивает содержимое объектов и возвращает true, когда оно эквивалентно, даже если объекты разные. Идентичность. is истинен только когда обе переменные хранят ссылку на один и тот же объект. Синглтоны. None, True и False существуют в единственном экземпляре, поэтому сравнение через is надёжно и быстрее. Пример кода Что использовать на практике Сравнение значений. Для строк, списков, чисел и других данных всегда применяй ==. Проверка на None. Используй идиоматичную запись x is None — она надёжна и быстрее. Осторожность с is. Для значений на is не полагайся: интерпретатор может кэшировать объекты. Подводные камни Кэш малых чисел. CPython переиспользует целые от -5 до 25