Что использует набор функций, чтобы проверить, отличаются ли два объекта? - PullRequest
6 голосов
/ 09 декабря 2008

Простой код:

>>> set([2,2,1,2,2,2,3,3,5,1])
set([1, 2, 3, 5])

Хорошо, в результирующих наборах нет дубликатов. Что если объект в списке не является int, но некоторые определены мной? Какой метод он проверяет, чтобы понять, отличаются ли они? Я реализовал __eq__ и __cmp__ с некоторыми объектами, но set , похоже, не использует их: \

Кто-нибудь знает, как это решить?

1 Ответ

13 голосов
/ 09 декабря 2008

Согласно документации set , элементы должны быть hashable .

Объект является хешируемым, если у него есть хеш-значение, которое никогда не изменяется в течение его времени жизни (ему нужен метод __hash__()), и его можно сравнить с другими объектами (ему нужен метод __eq__() или __cmp__()). Хэшируемые объекты, которые сравниваются равными, должны иметь одинаковое хеш-значение.

РЕДАКТИРОВАТЬ : добавлено правильное определение Hashable благодаря Роберто

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