Tuples and immutability
joshua at landau.ws
Fri Feb 28 15:41:20 CET 2014
On 27 February 2014 16:14, Chris Angelico <rosuav at gmail.com> wrote:
> On Fri, Feb 28, 2014 at 3:01 AM, Eric Jacoboni <eric.jacoboni at gmail.com> wrote:
>>>>> a_tuple = ("spam", [10, 30], "eggs")
>>>>> a_tuple += 
>> Traceback (most recent call last):
>> File "<stdin>", line 1, in <module>
>> TypeError: 'tuple' object does not support item assignment
>> Ok... I accept this message as += is a reassignment of a_tuple and a
>> tuple is immutable...
>> But, then, why a_tuple is still modified?
> This is a common confusion.
> The += operator does two things. First, it asks the target to please
> do an in-place addition of the other operand. Then, it takes whatever
> result the target gives back, and assigns it back into the target. So
> with a list, it goes like this:
>>>> foo = [10, 30]
> [10, 30, 20]
>>>> foo = _
Would it be better to add a check here, such that if this gets raised
to the top-level it includes a warning ("Addition was inplace;
variable probably mutated despite assignment failure")?
More information about the Python-list