Найти тему
Павлин Шарит

Вопрос, на который должен знать ответ каждый Python разработчик

Оглавление
Выражение будет True или False
Выражение будет True или False

Заходя на различные форумы или телеграмм-каналы связанные с 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"

Чтобы не пропустить последующие статьи - не забывайте подписаться, а чтобы порадовать меня - поставить лайк.