list.append problem?

Bob Parnes rparnes at megalink.net
Tue Oct 2 15:41:38 CEST 2001


Bob Parnes wrote:

> 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.
> 

Sorry, I wrote too hastily

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

The rule is the same, I used the wrong example.

-- 
Bob Parnes
rparnes at megalink.net



More information about the Python-list mailing list