a trick with lists ?
Tim Chase
python.list at tim.thechases.com
Thu Feb 7 16:42:58 EST 2008
>>> self.tasks[:] = tasks
>>>
>>> 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 ?
>>
>> It changes the list in-place. If it has been given to other objects, it
>> might require that.
>
> Nowadays it's stylistically better to write
>
> self.tasks = list(tasks)
>
> as it does just the same and makes it a little clearer what's going on
Um...except it's not "just the same"?
class Foo(object):
def __init__(self, tasks):
self.tasks1 = tasks
self.todo1 = [self.tasks1, 42]
self.tasks2 = tasks
self.todo2 = [self.tasks2, 42]
def new_tasks1(self, tasks):
self.tasks1 = list(tasks)
def new_tasks2(self, tasks):
self.tasks2[:] = list(tasks)
def __str__(self):
return "%r\n%r" % (self.todo1, self.todo2)
f = Foo([1,2,3])
f.new_tasks1([4,5,6])
print 'task1'
print f # todo1/2 haven't been changed
print 'task2'
f.new_tasks2([4,5,6])
print f # both todo 1 & 2 have been changed
Assignment to a name just rebinds that name. Assignment to a
slice of a list replaces the contents in-place.
-tkc
More information about the Python-list
mailing list