Dictionaries with tuples or tuples of tuples

Mitya Sirenef msirenef at lightbird.net
Tue Feb 19 04:56:40 CET 2013


On 02/18/2013 10:14 PM, Dave Angel wrote:
> On 02/18/2013 09:54 PM, Mitya  Sirenef wrote:
 >> On 02/18/2013 09:17 PM, Jon Reyes wrote:
 >>> Thanks Dave and Mitya for enlightening me about dictionaries. I'm
 >>> still confused about this though:
 >> >
 >> > " so that if two
 >> > key objects are equal, they stay equal, and if they differ, they stay
 >> > different. "
 >> >
 >> > What does this mean? I won't be comparing key objects with one
 >> another. Also, when I had two keys with the same value the value of the
 >> other key disappeared so I assume in runtime if there are multiple keys
 >> of the same value only the last one will appear.
 >>
 >> You won't be, but dict will.
 >>
 >> Dict is by definition a mapping where a value is assigned to a unique
 >> key. If you have two keys and two values, and then change one key to
 >> be equal to the second key, that's not kosher, because which value it's
 >> supposed to return when you try to get it by that key?
 >>
 >> So in effect, key's hash value should not change. If key is immutable,
 >> you can be certain that it's hash value will not change. If it's
 >> mutable, you have to make sure not to change the key in a way that'd
 >> make its hash value different than it was.
 >>
 >> -m
 >>
 >
 > It's a little stronger than that, since equal hashes cannot assure
 > equal data. The equality of each object pair in a dict must not
 > change over time, not just the hashes of the individual objects.
 >

Ah, yes - that's true; if hashes were unequal and then the key is
changed to be equal to the first key, both mydict[key1] and mydict[key2]
will give you value1, but iterating over dict items will print key1,
value1; key2, value2. And that's not a good thing.  -m


-- 
Lark's Tongue Guide to Python: http://lightbird.net/larks/

True friends stab you in the front.
Oscar Wilde




More information about the Python-list mailing list