On 2007-04-24, Thomas Nelson <[EMAIL PROTECTED]> wrote:
> On Apr 23, 10:38 pm, Mel Wilson <[EMAIL PROTECTED]> wrote:
>> Even with a balanced tree, if a key in a node changes value,
>> you may have to re-balance the tree.  Nothing in a Python list
>> says that a dictionary tree would have to be re-balanced if
>> you changed that particular list.
>
> You don't have to look at any implementation.  A dictionary
> maps every key to exactly one object.  If the objects were
> mutable, you could change one key to another key, and then
> which item would the dictionary pull?
> (Imaginary code)
> d = {[1,2,3]: 'hat', [1,2,4]: 'sock' }
> for key in d:
>     key.pop()
> print d[[1,2]]  #does this print hat or sock?

That would be documented as undefined behavior, and users
exhorted not to do such things.

Python's dictionaries are a proven winner--I'm definitely not an
advocate for changing them. But the general requirement for a
mapping container *isn't* that keys be immutable, but that you
either don't mutate keys, or don't do so without also reording
(rehashing?) the mapping.

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

Reply via email to