Tuples and immutability
John O'Hagan
research at johnohagan.com
Fri Feb 28 00:17:10 EST 2014
On Thu, 27 Feb 2014 18:19:09 +0200
Marko Rauhamaa <marko at pacujo.net> wrote:
> Eric Jacoboni <eric.jacoboni at gmail.com>:
>
> >>>> a_tuple[1] += [20]
> > Traceback (most recent call last):
> > File "<stdin>", line 1, in <module>
> > TypeError: 'tuple' object does not support item assignment
> >
> > [...]
> >
> > But, then, why a_tuple is still modified?
>
> That's because the += operator
>
> 1. modifies the list object in place
>
> 2. tries to replace the tuple slot with the list (even though the
> list hasn't changed)
>
> It's Step 2 that raises the exception, but the damage has been done
> already.
>
> One may ask why the += operator modifies the list instead of creating
> a new object. That's just how it is with lists.
>
> BTW, try:
>
> >>> a_tuple[1].append(20)
> >>> a_tuple[1].extend([20])
>
> Try also:
>
> >>> a_tuple[1] = a_tuple[1]
>
[...]
Also try:
x = a_tuple[1] #What's in a name?
x is a_tuple[1] #Obviously, but:
x += [1] #No error
a_tuple[1] += [1] #Error
Same object, just a different name - but a different result. I get why,
but still find that odd.
--
John
More information about the Python-list
mailing list