# how fast are swaps?
#
# For swapping the values of two variables `a' and `b', there are
# basically two idioms in Python:
#
# 1. The traditional approach with a temporary variable:
#
# temp = a; a = b; b = temp
#
# 2. Multiple assignments
#
# a, b = b, a
#
# It turns out, that in the standard Pythin distribution (at least up to
# Python 1.5.1), the traditional method is *faster* (for local
# variables). At least on my machine (Linux, Pentium 166):
#
# 1000000 traditional swaps in 5.06 seconds
# 1000000 multi-assignment swaps in 5.9 seconds
#
# For most python programs this speed difference is not really an issue
# and the question of which of the idioms to use is a matter of taste.
#
# An optimizing byte code compiler could optimize the multi-assignment
# by not actually creating the tuple.
import time
num = 1000
r = range(num)
def traditional():
x = 1
y = 0
t1 = time.clock()
for i in r:
for j in r:
q = x
x = y
y = q
t2 = time.clock()
return t2 - t1
def multipleassignment():
x = 1
y = 0
t1 = time.clock()
for i in r:
for j in r:
x, y = y, x
t2 = time.clock()
return t2 - t1
t = traditional()
print '%d traditional swaps in %g seconds' % (num * num, t)
t = multipleassignment()
print '%d multi-assignment swaps in %g seconds' % (num * num, t)
|