Why are tuples immutable?
Antoon Pardon
apardon at forel.vub.ac.be
Thu Dec 16 06:03:28 EST 2004
Op 2004-12-16, Max M schreef <maxm at mxm.dk>:
> Antoon Pardon wrote:
>
>> Well IMO there are two sides in this argument. The first is whether
>> or not python allows mutable keys. The second is whether or not
>> limiting keys to immutables in dictionaries provides a performance
>> gain.
>
>
> The problem is that you don't understand what dicts are typically used
> for. Because of the nonliniarity in dict lookups, dicts are used for
> optimisation.
>
> I actually think it's the most important tool for optimising Python code.
>
> If dicts allowed mutable keys, a dict would need to run code that
> corresponds to::
>
> def has_key(key):
> for key in self.keys():
> if a_key == key:
> return True
> return False
No you just would have to advise the programmer that he shouldn't
mutated objects that are keys in a dictionary, because if he does
things will break.
Just as people shouldn't mutate objects that are in a sorted list
on which one wants to do searches based on the fact that the list
is sorted and just as people shouldn't mutate objects that are
in a heapqueue.
The fact that the elements in certain kind of containers should
be have some kind of invariant is not a good argument to limit
those elements to immutable objects.
And as it turns out to be, python allows mutable objects as
keys just fine.
> Using immutable keys, a code can be generated for the key, that can be
> efficiently stored in something like a binary tree.
Just as it can with a mutable key, as long as the programmer takes care
not to mutate the objects that are currently used as a key.
> This makes lookup *very much* faster, and is the speed concern that
> Python programmers care about.
>
> Not the time taken to convert a list into a tuple.
You shouldn't speak for others. Others do have argued about speed loss
because of the need to copy a key before it was entered in a dictionary.
--
Antoon Pardon
More information about the Python-list
mailing list