On Jun 9, 2005, at 07:45, Kevin Reeder wrote: > I'm having trouble with this code which is meant to run a time > comparison between two similar functions. The first module is > makezeros.py > > def lots_of_appends(): > zeros = [] > for i in range(10000): > zeros.append(0) > > def one_multiply(): > zeros = [0] * 10000
Note that your functions don't do the same thing. The first one builds the list properly, but the second builds a list out of references to the same object -- that is, the 10000 zeros in your resulting second list are actually the same object. As long as you're working with immutable types (numbers, strings) you won't notice there's a problem, but consider the following: >>> a = [[0]] * 10 >>> a[0].append(1) >>> a [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1]] [0] is a list -- therefore, a mutable object: you can apply modifications to it. So, the list is actually a list of ten references to the same object -- [0]. When you run one of its methods that modifies it, since all references point to it, all members of the list seem to be modified as well -- but they're actually one single object that's present 10 times in the list. -- Max maxnoel_fr at yahoo dot fr -- ICQ #85274019 "Look at you hacker... A pathetic creature of meat and bone, panting and sweating as you run through my corridors... How can you challenge a perfect, immortal machine?" _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor