Sobes.tech
Middle
58

Оё имкон дорад, ки маҷмӯаи тағйирёбанда ҳамчун калид дар луғат истифода шавад? Номи рӯйхати хешкушоии худро иҷро кунед.

Ширкатҳо дар куҷо пурсиданд
it spirit

Ҷавоб аз AI

sobes.tech AI

В Python изменяемые коллекции (например, списки) нельзя использовать как ключи в словарях, потому что они не являются хэшируемыми (их содержимое может измениться, что нарушит контракт хэширования).

Чтобы сделать изменяемую коллекцию ключом, нужно реализовать собственный класс, который будет:

  • Хранить список
  • Реализовывать методы hash и eq

При этом важно, чтобы объект был неизменяемым после создания, иначе хэш станет некорректным.

Пример реализации хэшируемого списка:

class HashableList:
    def __init__(self, items):
        self._items = tuple(items)  # делаем неизменяемым
        self._hash = hash(self._items)

    def __eq__(self, other):
        if not isinstance(other, HashableList):
            return False
        return self._items == other._items

    def __hash__(self):
        return self._hash

    def __repr__(self):
        return f"HashableList({self._items})"

# Использование
hl1 = HashableList([1, 2, 3])
hl2 = HashableList([1, 2, 3])

my_dict = {hl1: "value"}
print(my_dict[hl2])  # выведет "value"

Таким образом, мы создаём объект, который ведёт себя как список, но является хэшируемым и может использоваться в качестве ключа.