Why are tuples immutable?
jeff at ccvcorp.com
Fri Dec 17 19:49:23 CET 2004
Antoon Pardon wrote:
>Op 2004-12-17, Jeff Shannon schreef <jeff at ccvcorp.com>:
>>(And I have to reiterate, here, that I have *never* felt it a hardship
>>to be unable to use lists as dictionary keys; it's just never come up
>>that the data that I had in a list was something that I wanted to use
>>as-is for a dict key, and I can't think of a situation where it *would*
>>happen. What you're saying, essentially, is that for the sake of one
>>form of aesthetic purity with no significant practical benefits, we
>>should break another form of aesthetic purity with massive practical
>Besides python doesn't provide such an aesthetic purity. Even if
>it was true that only immutables could be used as keys in dictionaries
>there are other times some invariant is established or depended upon
>and yet python doesn't enforce immutable objects in those cases.
>So much of the aesthetic purity python provides.
The aesthetic purity I'm referring to is that Python respects the proper
meaning of hashing, even if it doesn't force the programmer to. The
builtin objects that Python provides don't offer a __hash__() method
that fails to meet the mathematical prerequisites of a proper hash
function -- that is, objects that are equal will hash identically. In
addition, dictionaries expect keys to have proper hashing semantics,
such that a given object's hash value will not change over its
lifetime. It is not possible for a mutable object to satisfy both
aspects of proper hashing behavior, therefore Python does not pretend
that mutable objects are hashable. Python does provide features that
allow you to define your own __hash__() on your own classes, and it has
no way of forcing you to make that a *proper* hash function, which
allows you to subvert things and create pseudo-hashable mutable objects,
but Python declines to do that itself -- it'll give you the rope to hang
yourself with, but it's not tying the noose.
More information about the Python-list