[Python-Dev] Possible optimization for LOAD_FAST ?

Lukas Lueg lukas.lueg at googlemail.com
Tue Dec 28 18:08:58 CET 2010


Consider the following code:

def foobar(x):
    for i in range(5):
        x[i] = i

The bytecode in python 2.7 is the following:

  2           0 SETUP_LOOP              30 (to 33)
              3 LOAD_GLOBAL              0 (range)
              6 LOAD_CONST               1 (5)
              9 CALL_FUNCTION            1
             12 GET_ITER
        >>   13 FOR_ITER                16 (to 32)
             16 STORE_FAST               1 (i)

  3          19 LOAD_FAST                1 (i)
             22 LOAD_FAST                0 (x)
             25 LOAD_FAST                1 (i)
             28 STORE_SUBSCR
             29 JUMP_ABSOLUTE           13
        >>   32 POP_BLOCK
        >>   33 LOAD_CONST               0 (None)
             36 RETURN_VALUE

Can't we optimize the LOAD_FAST in lines 19 and 25 to a single load
and put the reference twice on the stack? There is no way that the
reference of i might change in between the two lines. Also, the
load_fast in lne 22 to reference x could be taken out of the loop as x
will always point to the same object....


More information about the Python-Dev mailing list