Thanks, Kirk. I considered the += as only a shorthand notation for the assignment operator. Since for lists + is simply a concatetation, I am not sure it x=x+[2] is creating a brand new list. Could you refer me to any documentation on this? Thanks, Nagy Kirk McDonald wrote: > nagy wrote: > > I do the following. First create lists x,y,z. Then add an element to x > > using the augumented assignment operator. This causes all the other > > lists to be changed also. > > But if I use the assignment x=x+[4] instead of using the augumented > > assignment, the y and z lists do not change. > > Why is that? > > This does not happen when I work with integer data type for example, as > > shown below. > > > > Thanks for your help > > Nagy > > > > > >>>>x=y=z=[] > > In this example, the '[]' creates a new list object. x, y, and z are all > set to reference that object. > > >>>>x+=[2] > > This does an "in-place" operation on that list, modifying (or > "mutating") the object directly. > > >>>>x > > > > > [2] > > > >>>>y > > > > [2] > > > >>>>z > > > > [2] > > > >>>>x=x+[4] > > This creates a new list that is the concatenation of the list created > above (the list [2]) with a new list (the list [4]). This brand new list > is bound to the name 'x'. The names 'y' and 'z' are left unchanged. That > is, they still point to the original list. > > >>>> > >>>>x > > > > [2, 4] > > > >>>>y > > > > [2] > > > >>>>z > > > > [2] > > > >>>>a=b=4 > > This binds the names 'a' and 'b' to the integer object 4. > > >>>>b > > > > 4 > > > >>>>a+=2 > > This attempts to mutate the integer object 4, by adding 2 to it. > However, numbers in Python are immutable, and so the in-place operation > fails. Thus, it creates a new integer object equal to 6 (actually, > CPython keeps a cache of certain smaller integer objects and reuses > them, but this does not matter in practice). This new integer object is > bound to the name 'a'. The name 'b' remains bound to the original 4 object. > > >>>>a > > > > 6 > > > >>>>b > > > > 4 > >
-- http://mail.python.org/mailman/listinfo/python-list