Какова семантика оператора is в Python? - PullRequest
10 голосов
/ 13 марта 2010

Как оператор is определяет, являются ли два объекта одинаковыми? Как это работает? Я не могу найти это документально.

Ответы [ 4 ]

13 голосов
/ 13 марта 2010

Операторы сравнения

Работает, сравнивая объект, на который ссылаются, чтобы увидеть, указывают ли операнды на один и тот же объект.

>>> a = [1, 2]
>>> b = a
>>> a is b
True
>>> c = [1, 2]
>>> a is c
False

c - это не тот же список, что и a, поэтому отношение is неверно.

12 голосов
/ 13 марта 2010

Из документации :

Каждый объект имеет идентичность, тип и значение. Личность объекта никогда не меняется, как только это было создано; Вы можете думать об этом как адрес объекта в памяти. Это' Оператор сравнивает идентичность двух объекты; функция id () возвращает целое число, представляющее его идентичность (в настоящее время реализуется как его адрес).

Похоже, это указывает на то, что он сравнивает адреса памяти аргументов, хотя тот факт, что он говорит «вы можете думать об этом как об адресе объекта в памяти», может указывать на то, что конкретная реализация не гарантирована; только семантика.

6 голосов
/ 15 марта 2010

Чтобы добавить к другим ответам, вы можете думать, что a is b работает так, как если бы это было is_(a, b):

def is_(a, b):
  return id(a) == id(b)

Обратите внимание, что вы не можете напрямую заменить a is b на id(a) == id(b), но вышеуказанная функция позволяет избежать этого с помощью параметров.

0 голосов
/ 30 июля 2015

Хотя ответ @ msw верен, вы можете подумать о том, что происходит, когда, например, эти объекты являются целыми числами или строками:

>>> a = 67
>>> b = 67
>>> c = 58
>>> a is b
True
>>> a is c
False

>>> a = 'dog'
>>> b = 'dog'
>>> c = 'cat'
>>> a is b
True
>>> a is c
False

Другими словами, по крайней мере, когда речь идет об этих типах данных, результат выражения is является результатом сравнения базовых значений на практике иногда действует так, как будто это сравнение значений из лежащих в основе, хотя на самом деле референсное сравнение делается .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...