Как проверить, ссылаются ли две переменные на один и тот же объект в Python? - PullRequest
41 голосов
/ 05 сентября 2010

x и y две переменные.
Я могу проверить, равны ли они, используя x == y, но как я могу проверить, имеют ли они одинаковую идентичность?

Пример:

x = [1, 2, 3]
y = [1, 2, 3]

Теперь x == y - Истина, потому что x и y равны, однако x и y не являются одним и тем же объектом.
Я ищу что-то вроде sameObject(x, y), которое в этом случае должно быть ложным.

Ответы [ 2 ]

56 голосов
/ 05 сентября 2010

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

>>> x = [1, 2, 3]
>>> y = [1, 2, 3]
>>> x == y
True
>>> x is y
False
4 голосов
/ 01 февраля 2019

Чтобы построить ответ от Марка Байерса:

Оценка is для идентификации тождеств будет работать, когда переменные содержат объекты, а не примитивные типы.

object_one = ['d']
object_two = ['d']
assert object_one is object_two  # False - what you want to happen

primitive_one = 'd'
primitive_two = 'd'
assert primitive_one is primitive_two  # True - what you don't want to happen

Если вам также нужно сравнить примитивы, я бы предложил использовать встроенную функцию id().
Из документов Python :

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

Так что это станет следующим:

...