[Python-Dev] Faster list comprehensions
Collin Winter
collinw at gmail.com
Fri Mar 3 13:58:03 CET 2006
More information about the Python-Dev mailing list
Fri Mar 3 13:58:03 CET 2006
- Previous message: [Python-Dev] bytes.from_hex()
- Next message: [Python-Dev] Faster list comprehensions
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hello all, I've just posted a patch to SF (python.org/sf/1442442) that I thought I'd bring to everyone's attention. Executive summary: by changing the behaviour of the unused LIST_APPEND opcode, it's possible to get a 16% speed boost for list comprehensions. Currently, list comprehensions are built up by calling a bound method on the storage list. This is pretty inefficient, as it requires extra stack manipulation and a function call for each element in the final list. My patch takes the LIST_APPEND opcode (which existed in the eval loop but not the compiler) and changes its behaviour; rather than take its list argument off the stack, it takes a stack offset, allowing it to leave the list object in place. This also replaces the slow Python function call with a fast call directly to PyList_Append. In total, this results in a 16% speed improvement [1]. [1] Benchmarking was done by taking the list comprehension examples in Lib/test/test_grammar.py and running them in a loop a few thousand times. Python revision 42780 took 1.69 seconds to run the examples 10000 times; the updated version takes 1.41 seconds. Thanks, Collin Winter
- Previous message: [Python-Dev] bytes.from_hex()
- Next message: [Python-Dev] Faster list comprehensions
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-Dev mailing list