Какая разница между 'is' и '==' в Python?

В чём разница между 'is' и '==' в if, и есть ли она вообще?


Ответы (2 шт):

Автор решения: S.H.

Я рискну привести такое - краткое, но зато очень простое объяснение:

оператор == проверяет равенство значений двух объектов

оператор is проверяет идентичность самих объектов. Его используют, чтобы удостовериться, что переменные указывают на один и тот же объект в памяти

Обратной стороной краткости ответа является то, что есть собенность: для экономии памяти, булевы типы, числа и строки могут кешироваться. Это означает, что при заведении двух разных, но равных между собой строк и str1==str2 и str1 is str2 будут True.

→ Ссылка
Автор решения: Ivan Silkin

В нормальных языках (со статической типизацией) обычно is определяет, принадлежит ли объект какому-то классу, например, классу Student:

if(object is Student) (object as Student).GetFirstName()

а == - это булевый оператор "равен", он определяет, ссылается ли объект на ту же область памяти, если это ссылочный тип, либо имеет то же значение, если это тип значения.

→ Ссылка