Заходя на различные форумы или телеграмм-каналы связанные с Python можно регулярно увидеть вопросы, чем отличается операторы "==" и "is". Если такие вопросы часто встречаются, значит не все знают на него ответ, поэтому давайте разберемся с ним раз и навсегда.
Если проводить аналогию с русским языком, то оператор "==" можно интерпретировать, как равно, например "a равно b", а оператор "is", как "a является b".
Практическая часть
Для начала разберем на практике примеры, где увидим, как работают операторы:
a = 5
b = 5
a == b # True
a is b # True
Пример выше можно назвать самым тривиальным и банальным, но необходим для того, чтобы перейти к более неочевидным.
a = 300
b = 300
a == b # True
a is b # False
Может показаться, что пример ничем не отличается от аналогичного выше, при этом a уже не является b. Перед тем, как разобраться почему так происходит рассмотрим еще несколько заключительных примеров и перейдем к теории.
a = []
b = []
a == b # True
a is b # False
a = 1000
b = 1000
a == b # True
a is b # False
a = b
a == b # True
a is b # True
Теоретическая часть
Оператор "==" используется для того, чтобы проверить равенство двух значений или переменных, а оператор "is" используется для проверки того, что две переменные ссылаются на одну ячейку памяти. Для того, чтобы это было проще принять необходимо рассмотреть функцию id.
id(a) # 140606811651728
Эта функция принимает объект и результатом ее выполнения будет число, которое указывает на идентификатор объекта. Данный идентификатор является уникальным для каждого объекта и не меняется на протяжении его жизни. Можно сказать, что оператор "is" как раз и проверяет идентификаторы объекта.
Рассмотрим пример с числами и почему в первом случае мы получали "True", а во втором "False". Дело в том, что Python хранит идентификаторы чисел от -5 до 256. Когда присваивается значение в этом диапазоне переменной в нее записывается ссылка на этот идентификатор и поэтому при проверке идентификаторов переменные равны.
Но если значения выходят за этот диапазон, то для каждой переменной python создает новый объект и присваивает каждой из них ссылку на новый объект.
Когда мы используем оператор присваивания, мы присваиваем переменной ссылку на значение второй переменной, поэтому в заключительном примере мы получаем "True"
Чтобы не пропустить последующие статьи - не забывайте подписаться, а чтобы порадовать меня - поставить лайк.