• Raymond Hettinger's avatar
    Refactor list_extend() and list_fill() for gains in code size, memory · 90a39bf1
    Raymond Hettinger yazdı
    utilization, and speed:
    
    * 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
        5 to 10% faster when x is a list or tuple
        15% faster when x is an iterable not defining __len__
        twice as fast when x is an iterable defining __len__
    
    * the code is about 15 lines shorter and no longer duplicates
      functionality.
    90a39bf1
listobject.c 64.7 KB