В питоне, если у меня есть кортеж со многими элементами, является его хэш рассчитывается из его элементы id
или его элементов контента?
В этом примере,
a = (1, [1,2])
hash(a)
Он ошибочно говорит, что список раскалывается. Поэтому я думаю, что это не вычисляется по id, или, вероятно, есть проверка того, является ли элемент изменчивым.
Теперь посмотрим на этот пример
class A: pass
a0 = A()
ta = (1, a0)
hash(ta) # -1122968024
a0.x = 20
hash(ta) # -1122968024
Здесь оказывается, что хэш ta
не изменяется с модификацией его элемента, т. a0
. Так может быть, a0
id используется для расчета хэша? Является ли a0
каким-то образом считаемым неизменным? Как python знает, является ли тип изменчивым?
Теперь рассмотрим этот случай
b = (1, 2)
id(b) # 3980742764
c = (1, 2)
id(c) # 3980732588
tb = (1, b)
tc = (1, c)
hash(tb) # -1383040070
hash(tc) # -1383040070
Кажется, что содержание b
и c
используется для вычисления хэша.
Как я должен понимать эти примеры?