Why are tuples immutable?

Antoon Pardon apardon at forel.vub.ac.be
Thu Dec 16 05:42:15 EST 2004


Op 2004-12-16, Paul Rubin schreef <http>:
> Antoon Pardon <apardon at forel.vub.ac.be> writes:
>> Two guidelines can make it easier for a programmer to do this.
>> 
>> 1) Put a copy in the dictionary, so that mutating the original
>>    object won't affect what is in the dictonary.
>
> What's supposed to happen here?
>
>     a = [1,2,3]
>     d[a] = 9
>     a.append(4)
>     print d[a]
>
> It doesn't sound like good dictionary semantics to me.

That depends on whether the programmes wants value equality
or identity equality.

In the first case the programmer shouldn't mutate a after
it was introduced as key in the dictionary; but should
either introduce a copy or work on a copy later. As
such your snippet of code would become.

  a = [1,2,3]
  d[a[:]] = 9
  a.append(4)
  print d[a]

And this would raise a KeyError, unless the list [1,2,3,4]
would be in the dictionary.


In the second case your code would produce 9.

-- 
Antoon Pardon



More information about the Python-list mailing list