Why does changing 1 list affect the other?

oom oom at xxnospamxx.ps.gen.nz
Wed Nov 5 23:22:14 EST 2003


On Wed, 05 Nov 2003 23:05:30 -0500, Roy Smith <roy at panix.com> wrote:

> oom <oom at xxnospamxx.ps.gen.nz> wrote:
>
>> I am a bit of a newbie when it comes to python, when working with
>> lists today I noticed some very odd behaviour, any suggestions
>> welcome:
>> 
>> Python 2.2.3 (#1, Nov  6 2003, 14:12:38) 
>> [GCC 3.3.2 20031022 (Gentoo Linux 3.3.2-r2, propolice)] on linux2
>> Type "help", "copyright", "credits" or "license" for more information.
>> >>> firstlist=['item1','item2','item2']
>> >>> secondlist=firstlist
>> >>> print (firstlist,secondlist)
>> (['item1', 'item2', 'item2'], ['item1', 'item2', 'item2'])
>> >>> firstlist[0]='strangeness'
>> >>> print (firstlist,secondlist)
>> (['strangeness', 'item2', 'item2'], ['strangeness', 'item2', 'item2'])
>> >>> 
>> 
>> why does altering one list affect the other list ? it is driving me
>> insane!
>> 
>
>Because when you say secondlist = firstlist, you're not making a copy of 
>the list, you're just making another reference to the existing list 
>object.  If you're used to C/C++, think of it as passing a pointer 
>around.
>
>If you really wanted to make a new list, you should look at the copy 
>module (specifically copy.deepcopy).  Or, somewhat simplier, you could 
>have just said secondlist = list (firstlist), which creates a new one 
>(kind of like a copy constructor might do in C++).

Well thanks to both Ben and Roy!!

I suspected something like this was going on, but what a head
scratching session I had!

This is a very active NG ;-)

problem solved





More information about the Python-list mailing list