Is LOAD_GLOBAL really that slow?

Adam Olsen rhamph at gmail.com
Wed Aug 29 21:23:52 EDT 2007


It seems a common opinion that global access is much slower than local
variable access.  However, my benchmarks show a relatively small
difference:

./python -m timeit -r 10 -v -s 'x = [None] * 10000
def foo():
  for i in x:
    list; list; list; list; list; list; list; list; list; list' 'foo()'
10 loops -> 0.0989 secs100 loops -> 0.991 secs
raw times: 0.999 0.985 0.987 0.985 0.985 0.982 0.982 0.982 0.981 0.985
100 loops, best of 10: 9.81 msec per loop

./python -m timeit -r 10 -v -s 'x = [None] * 10000
def foo():
  mylist = list
  for i in x:
    mylist; mylist; mylist; mylist; mylist; mylist; mylist; mylist;
mylist; mylist' 'foo()'
10 loops -> 0.0617 secs
100 loops -> 0.61 secs
raw times: 0.603 0.582 0.582 0.583 0.581 0.583 0.58 0.583 0.584 0.582
100 loops, best of 10: 5.8 msec per loop

So global access is about 70% slower than local variable access.  To
put that in perspective, two local variable accesses will take longer
than a single global variable access.

This is a very extreme benchmark though.  In practice, other overheads
will probably drop the difference to a few percent at most.  Not that
important in my book.

So my question: does somebody have a globals benchmark that shows a
really significant slowdown vs local variables?

-- 
Adam Olsen, aka Rhamphoryncus



More information about the Python-list mailing list