list.append problem?

Bob Parnes rparnes at megalink.net
Tue Oct 2 15:36:07 CEST 2001


Steve Holden wrote:

> "newgene" <newgene at bigfoot.com> wrote in message
> news:a50631f6.0110011345.31523630 at posting.google.com...
>> I am a newer of python. I have a problem like this code:
>>
>> >>> a=b=c=[]
>> >>> a.append(1)
>> >>> b.append(2)
>> >>> c.append(3)
>> >>> a
>> [1, 2, 3]
>> >>> b
>> [1, 2, 3]
>> >>> c
>> [1, 2, 3]
>>
>> a,b,c become the same, although append method applied seperately.
>> It's really strange and unreasonable.
>> My python is ActivePython Build 210 running on WinNT.
>>
> Strange and unreasonable as it may seem, it's classic Python. All three
> variables are bound to the same object, so when you change the object (no
> matter which name you use) the value you see when you access any of the
> names is the same.
> 
> However, try
>>>> a = []
>>>> b = []
>>>> c = []
>>>> a.append(1)
>>>> b.append(2)
>>>> c.append(3)
> 
> and you will see what you feel is more reasonable behavior: in this case
> each variable is bound to a different list, and so changing one of the
> lists doesn't affect the values bound to the other variables.
> 
> You get used to it after a while, and after your third progam it will seem
> the most reasonable thing to do!
> 
> regards
>  Steve
> --
> http://www.holdenweb.com/
> 
> 
> 
> 
> 
> 

As another newcomer I discovered this on my own. What is confusing, I 
think, is that it seems to apply only to empty objects. For example

>>> a = b = [1, 2. 3]
>>> a = [4, 5, 6]
>>> b
[1, 2, 3]
>>> a.append(7)
>>> a
[4, 5, 6, 7]
>>> b
[1, 2, 3]

In this case a and b are not bound to the same object. It seems to me that 
python treats empty objects differently from assigned objects. Or something 
like that, I'm probably not articulating it well.

-- 
Bob Parnes
rparnes at megalink.net



More information about the Python-list mailing list