== сравнивает значения по правилам типов, is проверяет, являются ли две ссылки одним и тем же объектом. Эти проверки не взаимозаменяемы.
В чём разница между операторами == и is?
== сравнивает значения по правилам типов, is проверяет, являются ли две ссылки одним и тем же объектом. Эти проверки не взаимозаменяемы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
== сравнивает значения по правилам типов, is проверяет, являются ли две ссылки одним и тем же объектом. Эти проверки не взаимозаменяемы.
[1, 2] == [1, 2] истинно, но два отдельно созданных списка не идентичны. Для None принято использовать value is None, чтобы не вызывать пользовательскую логику равенства.
Не сравнивайте строки и числа через is: интернирование и кеширование некоторых объектов — детали реализации, на которых нельзя строить логику. Пользовательский __eq__ может иметь нестандартное поведение, например вернуть массив сравнений, тогда как is всегда возвращает обычный bool.