Timing Difference: insert vs. append & reverse

Bryan Olson fakeaddress at nowhere.org
Fri Aug 6 04:35:20 EDT 2004


Tim Peters wrote:

 > [Bryan Olson, on complicating the list object again, and 2.4's deque 
type]
 >
 >>But it breaks (efficient) indexing.  Since we can have it all
 >>like Perl, why not?
 >
 >
 > As I said, the best Perl can do is O(1) amortized.

In fact, as both of us said.

 > If you follow the link you gave last time and read to the bottom
 > following the other links, you'll find that Perl lists had
 > quadratic-time behavior under the steady-state queue pattern for a
 > long time.  That was eventually fixed -- or so they say.  Small
 > details are both tricky and vital.

Agreed.  But those Perl wizards, misguided as they may be, are
pretty sharp.

 > 2.4's deque implementation is
 > obviously immune to "bad" patterns, steady-state queue or otherwise.
 >
 > Most immediately damning, adding another member to the list struct (to
 > keep track of the "low bound") would increase the size of every list
 > object by 8 bytes, on 32-bit boxes.  Python lists are easy to spell,
 > use and access, and some Python apps use millions of small lists.
 > They wouldn't appreciate the RAM hit for a mostly-useless feature.
 > Most Perl programmers seem to be so confused by Perl lists that they
 > only use them when they have to, to shift function arguments in and
 > out <0.6 wink>.

We must know different Perl programmers.

 > That's a use case for lists Python doesn't have at
 > all.
 >
 > You can pursue it if you want to, but with the 2.4 deque type I have
 > no interest in messing more with the list type.

I'm talking about facilities and their implementations, not
people.  True, when I pointed out that Perl nails this one, I
was kinda' thinking the comparison might motivate Pythoners to
pursue the same enhancement.  It was certainly *not* meant to
deride anyone who contributed to implementing Python.

Is Tim the superior Pythoner?  Duh.  Does Python rock?  Sure.
Is saving four-or-eight bytes more or less valuable than
providing efficient insert at both ends?  With all due respect
to Python and the people who implemented it, Perl kicks on this
one.


-- 
--Bryan



More information about the Python-list mailing list