This is not a gotcha, and it's not surprising. As John described, you're assigning a new value to an index of a tuple, which tuples don't support.
a[0] += [3] is the same as a[0] = a[0] + [3] which after evaluation is the same as a[0] = [1, 3] You can always modify an item that happens to be in a tuple if the item itself is mutable, but you cannot add, remove, or replace items in a tuple. Michael On Thu, Apr 5, 2012 at 10:15 AM, John Posner <jjpos...@optimum.net> wrote: > On 4/4/2012 7:32 PM, Chris Angelico wrote: >> Don't know if it's what's meant on that page by the += operator, > > Yes, it is. > >>> a=([1],) >>> a[0].append(2) # This is fine > > [In the following, I use the term "name" rather loosely.] > > The append() method attempts to modify the object whose name is "a[0]". > That object is a LIST, so the attempt succeeds. > >>> a[0]+=[3] # This is not. > > The assignment attempts to modify the object whose name is "a". That > object is a TUPLE, so the attempt fails. This might be a surprise, but > I'm not sure it deserves to be called a wart. > > Note the similarity to: > > temp = a[0] + [3] # succeeds > a[0] = temp # fails > > -John > > > > > -- > http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list