этого хочешь? Под "мутабельным" подразумеваю скорее то, что мутируемые данные участвуют в вычислении хэша
причем тут хочешь? мы говорим о том, что можно а что нельзя, конечно это не желательно но это и не запрещено.
"нельзя" можно использовать и как предостережение, лично я против этого, но питон, конечно, позволяет
позволяет, и в официальном источнике говориться, что ключом в словаре может быть все что hashable, вот и все.
Мутабельные данные не могут участвовать в вычислении хеша, так как это противоречит инвариантам __hash__
Противоречит, но не мешает. Это же уже прошедшее обсуждение, просто скорее всего ты не хочешь хэшируемый мутабельный объект
инварианты, это же из сферы тайпхинтов?
Это один из видов variance у тайп варов, но тут я использовал это слово в другом смысле и контексте, как правила, котоыре должны всегда выполняться
Я к тому, что если у тебя хеш не испольняет необходимые инварианты, значит, что он не реализовал протокол, значит объект не хешабельный
и что, он не пройдет по collections.Hashable?
Пройдет. Но рантаймовые проверки ничего не гарантируют. Они просто проверяют наличие атрибутов у классов, не смотря на сигнатуру даже. А «сложные» протоколы вроде Mapping провверяются не по наличию атрибута, по тому, что ты класс зарегистрировал
пройдет, так где он не реализует протокол в таком случае?
То что isinstance или issubclass вернули True не означает, что протокол реализуется
а что означает в таком случае?
То, что у объекта есть атрибут или то, что этот объект зарегистрировали
Обсуждают сегодня