Antoon Pardon wrote:

Op 2004-12-17, Jeff Shannon schreef <[EMAIL PROTECTED]>:



(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 benefits.)


[...]
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.


Jeff Shannon
Technician/Programmer
Credit International



--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to