Есть ли в Python объектный уникальный идентификатор

Это было бы подобно java.lang.Object.hashcode() метод.

Я должен хранить объекты, я не имею никакого контроля в наборе и удостоверяюсь, что, только если два объекта являются на самом деле тем же объектом (не содержат те же значения) будет значения быть перезаписанным.

73
задан dzieciou 2 July 2019 в 15:51
поделиться

3 ответа

id(x)

сделает фокус за вас. Но мне любопытно, что не так с набором объектов (который объединяет объекты по значению)?

Для вашей конкретной проблемы я бы, вероятно, сохранил набор идентификаторов или объектов-оберток. Объект-оболочка будет содержать одну ссылку и сравниваться по x == y <==> x.ref is y.ref .

Также стоит отметить, что объекты Python также имеют хэш-функцию . Эта функция необходима для помещения объекта в набор или словарь. Предполагается, что иногда он может конфликтовать для разных объектов, хотя хорошие реализации хэша пытаются снизить вероятность этого.

109
ответ дан 24 November 2019 в 12:18
поделиться

Вот для чего нужен « is ».

Вместо проверки « if a == b », которая проверяет то же значение ,

проверка ", если a равно b ", которая проверяет тот же идентификатор.

31
ответ дан 24 November 2019 в 12:18
поделиться

Как упоминает Ильян, id (x) создает уникальный идентификатор для объекта.

Но ваш вопрос сбивает с толку, поскольку метод Java hashCode не дает уникального идентификатора. Хэш-код Java работает так же, как и большинство хеш-функций: он всегда возвращает одно и то же значение для одного и того же объекта, два равных объекта всегда получают одинаковые коды, а неравные значения хеш-функции подразумевают неравные хэш-коды. В частности, два разных и неравных объекта могут получить одно и то же значение.

Это сбивает с толку, потому что криптографические хеш-функции сильно отличаются от этого и больше похожи (хотя и не совсем) на «уникальный идентификатор»

2
ответ дан 24 November 2019 в 12:18
поделиться