Augmented Assignement (was: Re: PEP scepticism)
sholden at holdenweb.com
Fri Jun 29 20:00:22 CEST 2001
"Mark 'Kamikaze' Hughes" <kamikaze at kuoi.asui.uidaho.edu> wrote in ...
> 28 Jun 2001 11:32:34 -0700 in
<mailman.993753043.27848.python-list at python.org>,
> Paul Prescod <paulp at ActiveState.com> spake:
> > I think Python has been getting better and better as time goes on. But I
> > do have a concern about augmented assignment. How can a newbie
> > understand that tuples are "immutable" if this works:
> > mytuple += (foo,bar)
> What would you expect from "mytuple = mytuple + (foo,bar)", and why
> would this be different from "mytuple += (foo,bar)"?
We would expect these to be the same.
> > Worse, once they've learned that this does NOT affect other references
> > to mytuple they are bound to be confused by
> > mylist += [foo, bar]
> > which does!
> What would you expect from "mylist = mylist + [foo, bar]", and why
> would this be different from "mylist += [foo, bar]"?
The two statements *can indeed* have different results. The difference lies
in the apparent changes to other names bound to the same object:
>>> lst1 = ['one', 'two']
>>> lst2 = ['two', 'three']
>>> steveslist = lst1
>>> markslist = lst2
>>> lst1 = lst1 + ['new', 'list', 'items']
>>> lst2 += ['new', 'list', 'items']
['two', 'three', 'new', 'list', 'items']
*Now* do you get it?
> > I've seen this confusion already -- in a draft of a book no less.
> I'm confused by your confusion. However, it looks like that author
> should probably make this more clear.
Despite your questions, mutable object behavior does vary between explicit
and augmented assignment, although immutable object behavior does not and
More information about the Python-list