Skip to content

Instantly share code, notes, and snippets.

@vsmelov
Created June 23, 2018 17:05
Show Gist options
  • Save vsmelov/ec8e099ef7ec7f3fa92ce7ec6c673516 to your computer and use it in GitHub Desktop.
Save vsmelov/ec8e099ef7ec7f3fa92ce7ec6c673516 to your computer and use it in GitHub Desktop.
Time efficiency of using sys.intern. Result is very sensible to DICT_LEN and KEY_LEN (due to match probability)
from sys import intern
from timeit import repeat, timeit
from random import choice
from string import digits
def random_str(length):
return ''.join(choice(digits) for _ in range(length))
DICT_LEN = 1024*8
KEY_LEN = 4
KEY_TOTAL_N = 1000
setup = """
D = dict((random_str(KEY_LEN), 1) for _ in range(DICT_LEN))
keys = [random_str(KEY_LEN) for _ in range(KEY_TOTAL_N)]
D_intern = dict((intern(random_str(KEY_LEN)), 1) for _ in range(DICT_LEN))
intern_keys = [intern(random_str(KEY_LEN)) for _ in range(KEY_TOTAL_N)]
"""
dummy_stmt = """
for key in keys:
D.get(key)
"""
just_intern_stmt = """
for key in keys:
key = intern(key)
"""
# intern_stmt = """
# for key in keys:
# key = intern(key)
# D.get(key)
# """
intern_keys_stmt = """
for key in intern_keys:
D.get(key)
"""
d_intern_keys_stmt = """
for key in intern_keys:
D_intern.get(key)
"""
REPEAT = 5
NUMBER = 100
if 1:
dummy_timer = sum(repeat(stmt=dummy_stmt, setup=setup, repeat=REPEAT, number=NUMBER, globals=globals()))/REPEAT
print(f"{dummy_timer} <- dummy_timer")
# just_intern_timer = repeat(stmt=just_intern_stmt, setup=setup, repeat=1, number=100, globals=globals())
# print(f"{just_intern_timer} <- just_intern_timer")
# intern_timer = repeat(stmt=intern_stmt, setup=setup, repeat=1, number=100, globals=globals())
# print(f"{intern_timer} <- intern_timer")
intern_keys_timer = sum(repeat(stmt=intern_keys_stmt, setup=setup, repeat=REPEAT, number=NUMBER, globals=globals()))/REPEAT
print(f"{intern_keys_timer} <- intern_keys_timer")
d_intern_keys_timer = sum(repeat(stmt=d_intern_keys_stmt, setup=setup, repeat=REPEAT, number=NUMBER, globals=globals()))/REPEAT
print(f"{d_intern_keys_timer} <- d_intern_keys_timer")
v1 = 'Vova Smelov'
v2 = 'V' + 'ova Smelov'
print(v1 is v2, v1==v2)
v2 = intern(v2)
print(v1 is v2, v1==v2)
v3 = intern('Vo' + 'va Smelov')
print(v2 is v3, v2==v3)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment