Augmented Assignment question

Delaney, Timothy C (Timothy) tdelaney at avaya.com
Wed Jul 16 20:25:39 EDT 2003


> From: Doug Tolton [mailto:dtolton at yahoo.com]
> 
> I mis-spoke, lists are not included.  You cannot do augmented
> assignments on tuples or multiple targets.

This is still incorrect. You correct thing to say is that you cannot do an augmented assignment on something which does not have a name, or which explicitly forbids it.

> >>> a,b = 0,0
> >>> a,b += 1,1
> SyntaxError: augmented assign to tuple not possible

>>> l = []
>>> l
[]
>>> id(l)
8289204
>>> l += [1,]
>>> l
[1]
>>> id(l)
8289204
>>> l += ['foo',]
>>> l
[1, 'foo']
>>> id(l)
8289204
>>> t = ()
>>> t
()
>>> id(t)
7966916
>>> t += (1,)
>>> t
(1,)
>>> id(t)
8261268
>>> t += ('foo',)
>>> t
(1, 'foo')
>>> id(t)
8133748

Note how the ID of `l` (list) does not change, but the id of `t` (tuple) does. This is because a tuple is immutable, and so:

    t += (1,)

is equivalent to:

    t = t + (1,)

whereas a list is mutable, and:

    l += [1,]

is equivalent to:

    l.extend([1,])

Every class can decide how to implement augmented assignment, using the __iadd__, etc magic methods.

Tim Delaney





More information about the Python-list mailing list