import timeit print('starting...') small = set(range(2000)) big = set(range(20000000)) difference = small - big std_big = set(range(20)) std_small = set(range(2)) first = set(range(15)) second = set(range(22)) setup = """ gc.enable() from __main__ import {a}, {b} """ fmt = """ a = {a}.copy() b = {b}.copy() a -= b """ fmt_subtraction = """ a = {a}.copy() b = {b}.copy() a - b """ print('setting up tests...', flush=True) def timer(s, **vars): return timeit.Timer(s.format(**vars), setup.format(**vars)) bench = dict( big_timer = timer(fmt, a='small', b='big'), big_timer_no_intersection = timer(fmt, a='small', b='difference'), big_timer_reversed = timer(fmt, a='big', b='small'), big_timer_subtraction = timer(fmt_subtraction, a='small', b='big'), std_timer = timer(fmt, a='std_small', b='std_big'), std_timer_subtraction = timer(fmt_subtraction, a='std_small', b='std_big'), small_timer = timer(fmt, a='first', b='second'), ) print('testing...', flush=True) for name, test in bench.items(): print(name, test.timeit(5), flush=True)