Zlomorda
В Python нет переменных. Есть только названия которые ссылаются на разные объекты. Для наглядности можно посмотреть на работу орепаторов «==» и «is».
Создадим два одинаковых листа (объекты):
list_1 = [0, 1, 2] list_2 = [0, 1, 2]
Спросим если они равны, и так же спросим если это тотже самый объект.
print(list_1 == list_2) # True print(list_1 is list_2) # False
Таким образом можно проверять если мы обращаемся к одному и томуже объекту или к разным объектам с одинаковым значением.
list_1 = [0, 1, 2] list_2 = [0, 1, 2] list_3 = list_2 print(list_1 == list_2) # True — да, они равны. print(list_1 is list_2) # False — это разный ообъекты. print(list_3 is list_2) # True — да, это тотже объект. print(list_3 is list_1) # False — это разный ообъекты. print(list_3 == list_1) # True — да, они равны.
В чем разница между is() и == в Python?
Разберемся, чем отличаются операторы в сравнения в Python и в каких случаях стоит использовать каждый из них.
Операторы is и == в Python выполняют похожие функции, но работают немного по-разному. И если вы новичок, используете сравнения в коде, стоит понимать разницу. Это поможет реже прибегать к рефакторингу и дебагу.
Оператор ==
== проверяет, равны ли значения двух операндов. В данном контексте — переменных, занимающих разные ячейки памяти.
>>> 1 == 1 True >>> 'abc' == 'abc' True >>> [1, 2, 3] == [1, 2, 3] True
Этот оператор можно использовать для сравнения практически любых объектов: строк, списков, словарей и кортежей. Это делает его очень частым «гостем» в инструкциях if-else. К тому же, когда через неделю свой код воспринимать становится сложнее, всего два символа в операторе упрощают чтение длиной в сотни строк.
Оператор is()
is() проверяет, являются ли два операнда одним и тем же объектом, то есть указывают ли они на один и тот же объект в памяти.
>>> a = [1, 2, 3] >>> b = a >>> a is b True
В этом случае a и b указывают на один и тот же список, поэтому a is b возвращает True .
>>> a = [1, 2, 3] >>> b = [1, 2, 3] >>> a is b False
Здесь a и b указывают на разные списки (несмотря на то, что их значения идентичны), поэтому a is b возвращает False .
Обычно is в Python используется для проверки идентичности объектов. Он может быть полезен, когда необходимо убедиться, что две ссылки указывают на один и тот же объект в памяти, а не просто имеют одинаковое значение. Однако, в большинстве случаев, достаточно использовать == .
В чем разница между ‘is’ и ‘==’ в python
Оператор is сравнивает идентичность двух объектов, в то время как оператор == сравнивает значения двух объектов. Существует разница в значении между равными и идентичными. И эта разница важна, когда вы хотите понять, как себя ведут операторы Python и ==.
Оператор == используется, когда значения двух операндов равны, тогда условие становится истинным.
Оператор is оценивает значение true, если переменные с обеих сторон оператора указывают на один и тот же объект и false в противном случае.
Рассмотрим следующий пример:
list_1 = ['a', 'b', 'c'] list_2 = list_1 list_3 = list(list_1) print(list_1) print(list_2) print(list_3)
Выход
['a', 'b', 'c'] ['a', 'b', 'c'] ['a', 'b', 'c']
В приведенном выше примере мы видим, что они указывают на идентичные списки. Затем мы проверяем равенство этих списков.
print(list_1 == list_2) print(list_1 == list_3)
Вышеприведенный вывод кода:
True True
Это связано с тем, что их значения list_1, list_2, list_3 равны, тогда условие становится истинным.
print(list_1 is list_2) print(list_1 is list_3)
Вышеприведенный вывод кода:
True False
Здесь вы можете видеть (list_1 is list_3) False, потому что list_1 и list_3 указывают на два разных объекта, хотя их содержимое может быть одинаковым. Итак, мы можем сказать, что «is» вернет True, если две переменные указывают на один и тот же объект и «==», если объекты, на которые ссылаются переменные, равны.
Какая разница между ‘is’ и ‘==’ в Python? [дубликат]
Я рискну привести такое — краткое, но зато очень простое объяснение:
оператор == проверяет равенство значений двух объектов
оператор is проверяет идентичность самих объектов. Его используют, чтобы удостовериться, что переменные указывают на один и тот же объект в памяти
Обратной стороной краткости ответа является то, что есть собенность: для экономии памяти, булевы типы, числа и строки могут кешироваться. Это означает, что при заведении двух разных, но равных между собой строк и str1==str2 и str1 is str2 будут True .
