sapsi <[EMAIL PROTECTED]> wrote: > Why can't lists be hashed? Several people have answered "because they're mutable" without explaining why mutability precludes hashing. So:
Consider a dict (dicts have been in Python a *lot* longer than sets, and have the same restriction) which allowed lists as keys: d = {} k = [1, 2] d[k] = None Now, if I were to do: k.append(3) what would you expect: d.keys() to return? Did d magically rehash k when it was modified? Did d[k] take a copy of k, and if so, how deep was the copy (consider d[[1, k]] = None followed by a modification to k)? Leaving the hash unchanged and relying on collision detection to resolve won't work, since you may go directly for d[[1, 2, 3]] and not spot that there's already an entry for it since it's been hashed under [1, 2]. "Practicality beats purity" and the design decision was to simply sidestep these issues by disallowing mutable dict keys. And as the set implementation is based on the dict implementation, it applies to sets to. -- \S -- [EMAIL PROTECTED] -- http://www.chaos.org.uk/~sion/ "Frankly I have no feelings towards penguins one way or the other" -- Arthur C. Clarke her nu becomeþ se bera eadward ofdun hlæddre heafdes bæce bump bump bump
-- http://mail.python.org/mailman/listinfo/python-list