Thank you, that's very clear indeed. "Helmut Jarausch" <[EMAIL PROTECTED]> a écrit dans le message de news: [EMAIL PROTECTED] > 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
-- http://mail.python.org/mailman/listinfo/python-list