Задать вопрос
@Drovosek01

Как правильно сравнивать на равенство в Python?

Доброго времени суток.

Я знаю об операторах сравнения
>, >=, <, <=, ==, !=

На днях, просматривая обучающие ролики по Python очередной раз наткнулся на использование оператора 'is' в качестве оператора сравнения на равенство. https://youtu.be/B_b_bxBKoEA?t=153
Я погуглил и понял, что этот оператор предназначен для того, чтобы сравнивать, что оба операнда находятся в одной области памяти.

Да, с помощью is сравнение иногда "проходит" корректно, а иногда нет. Вот что я испробовал:
>>> 123 is 123
True
>>> 1111111 is 1111111
True
>>> 'rijgogijdfkvjv304utgj03jrw' is 'rijgogijdfkvjv304utgj03jrw'
True
>>> 123 == 123
True
>>> a = 'Подпишитесь минимум на 10 тегов, чтобы следить за вопросами по интересным для вас темам.'
>>> b = 'Подпишитесь минимум на 10 тегов, чтобы следить за вопросами по интересным для вас темам.'
>>> a is b
False
>>> a == b
True
>>> a is 'Подпишитесь минимум на 10 тегов, чтобы следить за вопросами по интересным для вас темам.'
False
>>> 'Подпишитесь минимум на 10 тегов, чтобы следить за вопросами по интересным для вас темам.' is 'Подпишитесь минимум на 10 тегов, чтобы следить за вопросами по интересным для вас темам.'
True
>>> class A:
	def f():
		print('A.f')

		
>>> a = A()
>>> type(a) == A
True
>>> type(a) is A
True


Отсюда можно сделать вывод, что оператор is для сравнения можно использовать только для несложных конструкций, но это понятие растяжимое и оно нарушает "правило" python'а, что решение конкретной задачи должно быть однозначным (или как-то так).

В общем, почему человек на видео использовал is для сравнения на равенство? Он просто не разобрался в этом вопросе или ему было лень написать 2 раза "=" или может использовать is в каких-то случаях эффективней?
  • Вопрос задан
  • 3503 просмотра
Подписаться 1 Простой 2 комментария
Решения вопроса 1
JRazor
@JRazor
Senior StarkOverFlow Programmer
Операция == - это сравнение значений, а is - это сравнение ссылок внутри памяти. Если значения равны через ==, но не равны через is - они просто хранятся в разных ячейках памяти.

То есть, == отвечает на вопрос, равны ли объекты? А is отвечает на вопрос - это один и тот же объект?

Посему, c is можете сравнивать типы, None, False, True, а с переменными используйте ==
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
netpastor
@netpastor
Python developer
a is b эквивалентно id(a) == id(b)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы