Why no documentation of basic data structure performance?

David Eppstein eppstein at ics.uci.edu
Wed Feb 13 05:23:41 CET 2002


In article <mailman.1013571621.14946.python-list at python.org>,
 <brueckd at tbye.com> wrote:

> While the info you're talking about can be valuable in some cases, in most
> cases it just doesn't matter, for example, which list operation you use -
> and putting that sort of info in the main documentation encourages us to
> think about optimization when we shouldn't. For example, if I'm not paying
> attention I catch myself doing this too much:
> 
> meth = obj.method
> for item in seq:
>   meth(item)
> 
> Why? Because it saves a lookup to obj.method. But unless I'm trying to
> remove a specific bottleneck I'm solving a non-problem and cluttering my
> code at the same time. Shame on me!

I completely agree about not micro-optimizing until it's necessary,
I was more concerned with situations where the difference between two ways 
of doing things could be much larger (in the case I mentioned, constant 
time vs linear time) and nonobvious (identical wording for the two tutorial 
examples).

> Somebody had a Python optimization page I found useful (was it Skip?) -
> maybe you could report your findings to him/her and have the page updated.
> IMO, that's where this sort of info belongs - on a web page or document
> that we can find when we need it but just far enough out of the way that
> we don't spend too much time looking at it.

Separate documentation per-implementation, somewhere easy to find, sounds 
like a reasonable choice -- another would be to have a few paragraphs here 
and there in the tutorial discussing these issues in the context of the 
major implementations.  Anyway, though, I'm not sure calling it 
optimization matches what I'm thinking of.  My feeling is that choosing the 
right algorithms and data structures is better done before you code, at 
design time, rather than as an optimization after you code -- otherwise you 
may find yourself locked into a solution that's too inefficient or 
inflexible and only able to make minor changes such as the method lookup 
lifting you discuss above.
-- 
David Eppstein       UC Irvine Dept. of Information & Computer Science
eppstein at ics.uci.edu http://www.ics.uci.edu/~eppstein/



More information about the Python-list mailing list