Skip to content

Instantly share code, notes, and snippets.

@1st1
Created September 9, 2019 15:49
Show Gist options
  • Save 1st1/be5a1c10aceb0775d0406e879cf87344 to your computer and use it in GitHub Desktop.
Save 1st1/be5a1c10aceb0775d0406e879cf87344 to your computer and use it in GitHub Desktop.
import pyrsistent
import immutables
import time
I = 1000000
KEY = '5'
for N in [5, 10, 20, 30, 100, 200, 300, 400, 500, 1000]:
print('=============')
print(f' # of items: {N}; iterations: {I}')
print()
h = immutables.Map()
d = dict()
pm = pyrsistent.m()
for i in range(N):
h = h.set(str(i), i)
pm = pm.set(str(i), i)
d[str(i)] = i
assert len(h) == N
for i in range(N):
assert h.get(str(i), 'not found') == i
st = time.monotonic()
for _ in range(I):
d.get(KEY)
d.get(KEY)
d.get(KEY)
d.get(KEY)
d.get(KEY)
d.get(KEY)
d.get(KEY)
d.get(KEY)
d.get(KEY)
d.get(KEY)
d2 = d.copy()
d2['aaa'] = 'aaa'
end = time.monotonic() - st
print(f" dict copy:\t\t\t{end:.4f}s")
st = time.monotonic()
for _ in range(I):
h.get(KEY)
h.get(KEY)
h.get(KEY)
h.get(KEY)
h.get(KEY)
h.get(KEY)
h.get(KEY)
h.get(KEY)
h.get(KEY)
h.get(KEY)
h2 = h.set('aaa', 'aaa')
end = time.monotonic() - st
print(f" immutables.Map:\t\t{end:.4f}s")
st = time.monotonic()
for _ in range(I):
pm.get(KEY)
pm.get(KEY)
pm.get(KEY)
pm.get(KEY)
pm.get(KEY)
pm.get(KEY)
pm.get(KEY)
pm.get(KEY)
pm.get(KEY)
pm.get(KEY)
pm2 = pm.set('aaa', 'aaa')
end = time.monotonic() - st
print(f" PMap:\t\t\t\t{end:.4f}s")
@aeros
Copy link

aeros commented Sep 20, 2019

Benchmark results:
OS: Arch Linux 5.3.0
CPU: Intel i5-4460
RAM: 16G

=============
  # of items: 5; iterations: 1000000
  dict copy:                    0.9841s
  immutables.Map:               1.2221s
  PMap:                         15.1024s
=============
  # of items: 10; iterations: 1000000
  dict copy:                    1.0641s
  immutables.Map:               1.4830s
  PMap:                         11.4983s
=============
  # of items: 20; iterations: 1000000
  dict copy:                    1.0052s
  immutables.Map:               1.4763s
  PMap:                         11.2620s
=============
  # of items: 30; iterations: 1000000
  dict copy:                    1.0856s
  immutables.Map:               1.5449s
  PMap:                         11.0159s
=============
  # of items: 100; iterations: 1000000
  dict copy:                    1.3583s
  immutables.Map:               1.5678s
  PMap:                         12.1514s
=============
  # of items: 200; iterations: 1000000
  dict copy:                    2.1822s
  immutables.Map:               1.6834s
  PMap:                         12.6607s
=============
  # of items: 300; iterations: 1000000
  dict copy:                    2.9123s
  immutables.Map:               1.7050s
  PMap:                         12.4604s
=============
  # of items: 400; iterations: 1000000
  dict copy:                    4.1913s
  immutables.Map:               1.8522s
  PMap:                         12.4791s
=============
  # of items: 500; iterations: 1000000
  dict copy:                    4.9216s
  immutables.Map:               1.8017s
  PMap:                         12.6718s
=============
  # of items: 1000; iterations: 1000000
  dict copy:                    9.3672s
  immutables.Map:               1.7347s
  PMap:                         12.9271s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment