List unhashable, but tuple hashable?

前端 未结 6 868
渐次进展
渐次进展 2020-12-08 10:15

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, bu

6条回答
  •  佛祖请我去吃肉
    2020-12-08 10:30

    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.

提交回复
热议问题