В языке программирования Python есть различные операторы для сравнения, включая операторы идентичности is
и is not
.
Они позволяют проверить, ссылаются ли два объекта на одно и то же место в памяти, т.е. являются ли они идентичными.
В этой статье мы разберем, как работают операторы идентичности is
и is not
, когда их следует использовать и как отличить их от операторов равенства.
Оператор идентичности is
Оператор is
сравнивает два объекта на идентичность, т.е. проверяет, ссылаются ли они на один и тот же объект в памяти. Важно понимать, что is
не проверяет равенство значений объектов, а только их идентичность.
Примеры использования оператора is
:
a = [1, 2, 3] b = a c = [1, 2, 3] print(a is b) # True, так как a и b ссылаются на один и тот же объект print(a is c) # False, так как a и c ссылаются на разные объекты, хотя их значения равны
x = None y = None print(x is y) # True, так как None является синглтоном, и существует только один экземпляр None
Оператор идентичности is not
Оператор is not
является противоположностью оператора is
. Он возвращает True
, если два объекта НЕ ссылаются на одно и то же место в памяти, и False
в противном случае.
Примеры использования оператора is not
:
a = [1, 2, 3] b = a c = [1, 2, 3] print(a is not b) # False, так как a и b ссылаются на один и тот же объект print(a is not c) # True, так как a и c ссылаются на разные объекты
Разница между операторами идентичности и равенства
Операторы идентичности (is
и is not
) сравнивают объекты на идентичность, в то время как операторы равенства (==
и !=
) сравнивают объекты на равенство их значений.
Примеры различий между операторами идентичности и равенства:
a = [1, 2, 3] b = a c = [1, 2, 3] print(a == b) # True, так как значения a и b равны print(a == c) # True, так как значения a и c равны print(a is b) # True, так как a и b ссылаются на один и тот же объект print(a is c) # False, так как a и c ссылаются на разные объекты, хотя их значения равны
Когда использовать операторы идентичности
Операторы идентичности используются, когда необходимо проверить, являются ли две переменные ссылками на один и тот же объект. Некоторые типичные сценарии использования:
1. Проверка на None
:
x = None y = 42 if x is None: print("x is None") if y is not None: print("y is not None")
2. Определение, является ли переменная ссылкой на глобальный объект:
global_list = [1, 2, 3] def modify_list(lst): if lst is global_list: print("lst ссылается на global_list") modify_list(global_list) # Вывод: "lst ссылается на global_list"
В случаях, когда требуется сравнение значений объектов, следует использовать операторы равенства.
Заключение
Операторы идентичности is
и is not
в Python используются для сравнения объектов на идентичность, то есть проверки того, ссылаются ли они на одно и то же место в памяти. Они отличаются от операторов равенства, которые сравнивают значения объектов.