import collections
import time
BatchResult = collections.namedtuple( 'BatchResult' , 'list , string' )
class MyObject:
def __init__( self ):
self.a = 'a'
self.b = 'b'
self.c = 1
def seed_list_objects( count ):
mylist = list()
for i in xrange( count ):
mylist.append( MyObject() )
return mylist
def seed_list_numbers( count ):
mylist = list()
for i in xrange( count ):
mylist.append( i )
return mylist
def return_tuple_numbers():
mylist = seed_list_numbers( 10000 )
mystring = 'string'
return mylist,mystring
def return_tuple_objects():
mylist = seed_list_objects( 10000 )
mystring = 'string'
return mylist,mystring
def return_namedtuple_numbers():
mylist = seed_list_numbers( 10000 )
mystring = 'string'
batch_result = BatchResult( mylist,mystring )
return mylist,mystring
def return_namedtuple_objects():
mylist = seed_list_objects( 10000 )
mystring = 'string'
batch_result = BatchResult( mylist,mystring )
return mylist,mystring
def return_dictionary_numbers():
mylist = seed_list_numbers( 10000 )
mystring = 'string'
batch_dict = { 'list': mylist, 'string': mystring }
return batch_dict
def return_dictionary_objects():
mylist = seed_list_objects( 10000 )
mystring = 'string'
batch_dict = { 'list': mylist, 'string': mystring }
return batch_dict
# main
repetitions = 10
start = time.time()
for k in xrange( repetitions ):
results_dict = return_dictionary_numbers()
mylist = results_dict[ 'list' ]
mystring = results_dict[ 'string' ]
print '%s elements with %s in %f seconds: dictionary_numbers' % ( len( mylist ) , mystring, time.time() - start )
start = time.time()
for k in xrange( repetitions ):
mylist,mystring = return_namedtuple_numbers()
print '%s elements with %s in %f seconds: namedtuple numbers' % ( len( mylist ) , mystring, time.time() - start )
start = time.time()
for k in xrange( repetitions ):
mylist,mystring = return_tuple_numbers()
print '%s elements with %s in %f seconds: tuple numbers' % ( len( mylist ) , mystring, time.time() - start )
print
start = time.time()
for k in xrange( repetitions ):
results_dict = return_dictionary_objects()
mylist = results_dict[ 'list' ]
mystring = results_dict[ 'string' ]
print '%s elements with %s in %f seconds: dictionary objects' % ( len( mylist ) , mystring, time.time() - start )
start = time.time()
for k in xrange( repetitions ):
mylist,mystring = return_namedtuple_objects()
print '%s elements with %s in %f seconds: namedtuple objects' % ( len( mylist ) , mystring, time.time() - start )
start = time.time()
for k in xrange( repetitions ):
mylist,mystring = return_tuple_objects()
print '%s elements with %s in %f seconds: tuple objects' % ( len( mylist ) , mystring, time.time() - start )
# 1 repetition with ubuntu 12 python 2.7.3 (presumable cpython)
# 10000 elements with string in 0.001059 seconds: dictionary_numbers
# 10000 elements with string in 0.001010 seconds: namedtuple numbers
# 10000 elements with string in 0.001096 seconds: tuple numbers
# 10000 elements with string in 0.009293 seconds: dictionary objects
# 10000 elements with string in 0.008002 seconds: namedtuple objects
# 10000 elements with string in 0.009875 seconds: tuple objects
# 100 repetitions
# 10000 elements with string in 0.091571 seconds: dictionary_numbers
# 10000 elements with string in 0.091959 seconds: namedtuple numbers
# 10000 elements with string in 0.091551 seconds: tuple numbers
# 10000 elements with string in 0.820914 seconds: dictionary objects
# 10000 elements with string in 0.849920 seconds: namedtuple objects
# 10000 elements with string in 0.857152 seconds: tuple objects