sublist copies result in behavioural anomoly

Paul Whipp pwhipp at auran.com
Thu Nov 6 23:20:56 EST 2003


Hi there,

I'm new to Python so apologies if this is too naive...

I wanted to recurse down a list to do an ordered insert.  All was well
until...

def splung(l,x):
    if l[1:]==[]:
        l[1:]=[x]
    elif x>l[1]:
        splung(l[1:],x)
    else:
        l[1:1]=[x]


>>> foo=[1]
>>> splung(foo,2)
>>> foo
[1, 2]
>>> splung(foo,3)
>>> foo
[1, 2]
>>>

It took me a while to divine that the l[1:] is destroyed if its an lvalue
but returns a copy when used as an argument parameter.  If that is the case,
then is there an effective way to recurse and destructively do an ordered
insert on a list?

Cheers,
Paul






More information about the Python-list mailing list