gsamaras gsamaras - 7 months ago 65
Python Question

List unhashable, but tuple hashable?

In How to hash lists? I was told that I should convert to a tuple first, e.g.

[1,2,3,4,5]
to
(1,2,3,4,5)
.

So the first cannot be hashed, but the second can. Why*?




*I am not really looking for a detailed technical explanation, but rather for an intuition

val val
Answer

Mainly, because tuples are immutable. Assume the following works:

>>> l = [1, 2, 3]
>>> t = (1, 2, 3)
>>> x = {l: 'a list', t: 'a tuple'}

Now, what happens when you do l.append(4)? You've modified the key in your dictionary! From afar! If you're familiar with how hashing algorithms work, this should frighten you. Tuples, on the other hand, are absolutely immutable. t += (1,) might look like it's modifying the tuple, but really it's not: it simply creating a new tuple, leaving your dictionary key unchanged.