我需要一个 Python 中的内存高效 int-int dict,它可以在O(log n)时间内支持以下操作:
d[k] = v # replace if present
v = d[k] # None or a negative number if not present
我需要持有约 2.5 亿对,所以它真的必须很紧。
你碰巧知道一个合适的实现(Python 2.7)吗?
编辑删除了不可能的要求和其他废话。谢谢,克雷格和凯洛坦!
改写。这是一个包含 1M 对的普通 int-int 字典:
>>> import random, sys
>>> from guppy import hpy
>>> h = hpy()
>>> h.setrelheap()
>>> d = {}
>>> for _ in xrange(1000000):
... d[random.randint(0, sys.maxint)] = random.randint(0, sys.maxint)
...
>>> h.heap()
Partition of a set of 1999530 objects. Total size = 49161112 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 1 0 25165960 51 25165960 51 dict (no owner)
1 1999521 100 23994252 49 49160212 100 int
平均而言,一对整数使用49 个字节。
这是一个 2M 整数的数组:
>>> import array, random, sys
>>> from guppy import hpy
>>> h = hpy()
>>> h.setrelheap()
>>> a = array.array('i')
>>> for _ in xrange(2000000):
... a.append(random.randint(0, sys.maxint))
...
>>> h.heap()
Partition of a set of 14 objects. Total size = 8001108 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 1 7 8000028 100 8000028 100 array.array
平均而言,一对整数使用8 个字节。
我接受字典中的 8 个字节/对通常很难实现。 改写的问题:是否有一个内存有效的 int-int 字典实现,它使用的字节数大大少于 49 个字节/对?