>>> xs = []
>>> set([xs])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
Вот, пожалуйста.Наборы используют хэши, очень похожие на dicts.Это значительно повышает производительность (тесты членства - O (1), а многие другие операции зависят от тестов членства), и это также хорошо соответствует семантике наборов: элементы набора должны быть уникальными, и разные элементы будут создавать разные хэши, в то время как те же хэшиуказать (ну, в теории) дубликаты.
Поскольку значение по умолчанию __hash__
равно id
(что довольно глупо, imho), два экземпляра класса, который наследует object
'__hash__
, будутникогда не хэшируйте одно и то же значение (хорошо, если только адресное пространство не превышает sizeof
хеша).