Какая разница между 'is' и '==' в Python?
В чём разница между 'is' и '==' в if, и есть ли она вообще?
Ответы (2 шт):
Я рискну привести такое - краткое, но зато очень простое объяснение:
оператор == проверяет равенство значений двух объектов
оператор is проверяет идентичность самих объектов. Его используют, чтобы удостовериться, что переменные указывают на один и тот же объект в памяти
Обратной стороной краткости ответа является то, что есть собенность: для экономии памяти, булевы типы, числа и строки могут кешироваться. Это означает, что при заведении двух разных, но равных между собой строк и str1==str2 и str1 is str2 будут True.
В нормальных языках (со статической типизацией) обычно is определяет, принадлежит ли объект какому-то классу, например, классу Student:
if(object is Student) (object as Student).GetFirstName()
а == - это булевый оператор "равен", он определяет, ссылается ли объект на ту же область памяти, если это ссылочный тип, либо имеет то же значение, если это тип значения.