a trick with lists ?
Sébastien Vincent
sebastien_nimp73
Fri Feb 8 05:35:01 EST 2008
Thank you, that's very clear indeed.
"Helmut Jarausch" <jarausch at igpm.rwth-aachen.de> a écrit dans le message de
news: 612mcfF1sa420U1 at mid.dfncis.de...
> Sébastien Vincent <sebastien_nimp73 wrote:
>> I've found some class on the Net which takes basically this form :
>>
>> ######
>> class Foo:
>> def __init__(self):
>> self.tasks = []
>> ...
>>
>> def method1(self):
>> tasks = []
>> while True:
>> ...
>> append/pop elements into/from tasks
>> ...
>> if condition : break
>>
>> self.tasks[:] = tasks
>> return
>> ######
>>
>> What I do not fully understand is the line "self.tasks[:] = tasks". Why
>> does the guy who coded this did not write it as "self.tasks = tasks"?
>> What is the use of the "[:]" trick ?
>>
>
> I've just run into this difference myself.
> As several others have pointed out, assignment to
> self.task[:] modifies this list in place.
>
> Here my example showing a striking difference
>
> class MyClass(object) :
> def shorten_list(self,outer_list) :
> ll=len(outer_list)
> if ll > 0 :
> outer_list[:]= outer_list[:ll-1]
>
>
> mylist=[1,2,3]
> MyClass().shorten_list(mylist)
> print mylist
>
> // this prints [1, 2] (as expected)
>
> class MyClass2(object) :
> def shorten_list(self,outer_list) :
> ll=len(outer_list)
> if ll > 0 :
> outer_list= outer_list[:ll-1]
>
>
> mylist=[1,2,3]
> MyClass2().shorten_list(mylist)
> print mylist
>
> # this prints [1, 2, 3]
>
> The shortened list outer_list[:ll-1] has been assigned (bound in Python
> terms)
> to the LOCAL reference (to a list) 'outer_list'
>
> --
> Helmut Jarausch
>
> Lehrstuhl fuer Numerische Mathematik
> RWTH - Aachen University
> D 52056 Aachen, Germany
More information about the Python-list
mailing list