* Moved the responsibility for emptying the previous list from list_fill

to list_init.

* Replaced the code in list_extend with the superior code from list_fill.

* Eliminated list_fill.

Results:

* list.extend() no longer creates an intermediate tuple except to handle
  the special case of x.extend(x).  The saves memory and time.

* list.extend(x) runs
    about the same x is a list or tuple,
    a little faster when x is an iterable not defining __len__, and
    twice as fast when x is an iterable defining __len__.

* the code is about 15 lines shorter and no longer duplicates
  functionality.
This commit is contained in:
Raymond Hettinger 2004-02-15 04:06:39 +00:00
parent 90a39bf12c
commit fa7b9d8255
1 changed files with 5 additions and 0 deletions

View File

@ -12,6 +12,11 @@ What's New in Python 2.4 alpha 1?
Core and builtins Core and builtins
----------------- -----------------
- Optimized list.extend() to save memory and no longer create
intermediate sequences. Also, extend() now pre-allocates the
needed memory whenever the length of the iterable is known in
advance -- this halves the time to extend the list.
- Optimized list resize operations to make fewer calls to the system - Optimized list resize operations to make fewer calls to the system
realloc(). Significantly speeds up list appends, list pops, realloc(). Significantly speeds up list appends, list pops,
list comprehensions, and the list contructor (when the input iterable list comprehensions, and the list contructor (when the input iterable