Хеширование массивов в Python
Возможно ли хеш lists
?
Например, я знаю, что хеши кортежей возможны:
>>> hash((1,2,3,4,5,6))
-319527650
Но возможно ли хеш a list
?
>>> hash([1,2,3,4,5,6])
hash_value
Возможное решение:
Подробное объяснение хэширования списков здесь.
Ответы
Ответ 1
Просто попробуйте:
>>> hash((1,2,3))
2528502973977326415
>>> hash([1,2,3])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> hash(frozenset((1,2,3)))
-7699079583225461316
>>> hash(set((1,2,3)))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'
Таким образом, вы можете получить hash
из tuple
и frozenset
, поскольку они являются неизменяемыми, и вы не можете сделать это для list
и set
, потому что они изменяемы.
Ответ 2
Python не позволяет использовать изменяемые данные как ключи в словарях, потому что изменения после вставки сделают объект не найденным. Вы можете использовать кортежи в качестве ключей.
Ответ 3
Если вам действительно нужно использовать список в качестве словарного ключа, попробуйте сначала преобразовать его в строку.
my_list = str(my_list)