== сравнивает значения на предмет равенства, а is сравнивает идентичность, что означает, указывают ли две ссылки на один и тот же объект в памяти.
Разбор
Важно об оптимизации (интернировании): CPython кэширует небольшие целые числа от -5 до 256 и некоторые короткие строки во время компиляции или загрузки. В результате is может вернуть для них True, даже если они были созданы отдельно. Но это деталь реализации, и на нее не следует полагаться в бизнес-логике.
Всегда используйте is вместо None.
Суммируя:
== касается равенства значений.
is касается идентификации объекта.
- Интернирование может привести к неочевидным результатам
is True для небольших значений int и
strings.
value is None — правильный способ проверить наличие None.
Итог
== сравнивает значения на предмет равенства, а is сравнивает идентичность, что означает, указывают ли две ссылки на один и тот же объект в памяти.