list.clear() missing?!?

Steven D'Aprano steve at REMOVETHIScyber.com.au
Wed Apr 12 07:09:23 EDT 2006


On Wed, 12 Apr 2006 00:33:29 -0700, Serge Orlov wrote:

> 
> Felipe Almeida Lessa wrote:
>> Em Qua, 2006-04-12 às 11:36 +1000, Steven D'Aprano escreveu:
>> > On Tue, 11 Apr 2006 19:15:18 +0200, Martin v. Löwis wrote:
>> >
>> > > Felipe Almeida Lessa wrote:
>> > >> I love benchmarks, so as I was testing the options, I saw something very
>> > >> strange:
>> > >>
>> > >> $ python2.4 -mtimeit 'x = range(100000); '
>> > >> 100 loops, best of 3: 6.7 msec per loop
>> > >> $ python2.4 -mtimeit 'x = range(100000); del x[:]'
>> > >> 100 loops, best of 3: 6.35 msec per loop
>> > >> $ python2.4 -mtimeit 'x = range(100000); x[:] = []'
>> > >> 100 loops, best of 3: 6.36 msec per loop
>> > >> $ python2.4 -mtimeit 'x = range(100000); del x'
>> > >> 100 loops, best of 3: 6.46 msec per loop
>> > >>
>> > >> Why the first benchmark is the slowest? I don't get it... could someone
>> > >> test this, too?
>> > >
>> > > In the first benchmark, you need space for two lists: the old one and
>> > > the new one;
>> >
>> > Er, what new list? I see only one list, x = range(100000), which is merely
>> > created then nothing done to it. Have I missed something?
>>
>> He's talking about the garbage collector.
> 
> To be exact the reason for two array is timeit.py. It doesn't place the
> code to time into a separate namespace but injects it into a for loop,
> so the actual code timed is:
> for _i in _it:
>     x = range(100000)
> and that makes two arrays with 100.000 items exist for a short time
> starting from second iteration.

But that is precisely the same for the other timeit tests too.

for _i in _it:
    x = range(100000)
    del x[:]

etc.

The question remains -- why does it take longer to do X than it takes to
do X and then Y?


-- 
Steven.




More information about the Python-list mailing list