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