![]() |
1
6
你可以使用 IIBtree 来自Zope |
![]() |
2
5
我不知道这是一个一次性解决方案,还是正在进行的项目的一部分,但如果是前者,是不是在用比必要的开发人员时间更便宜的内存来优化内存使用?即使每对64个字节,您仍然只能看到15GB,这将很容易适合大多数桌面设备。 我认为正确的答案可能在scipy/numpy库中,但我对这个库还不够熟悉,无法确切地告诉你该在哪里查找。 http://docs.scipy.org/doc/numpy/reference/ 您还可以在这个主题中找到一些有用的想法: Memory Efficient Alternatives to Python Dictionaries |
![]() |
3
4
在任何实现(Python或其他)下,每个键/值对8个字节都是相当困难的。如果不能保证键是连续的,那么要么使用数组表示法在键之间浪费大量空间(同时需要某种死值来指示空键),要么需要维护一个单独的索引到键/值对,根据定义这对索引到键/值对每对超过8个字节(即使只有一小部分)。 我建议您使用数组方法,但最佳方法将取决于我期望的键的性质。 |
![]() |
4
3
如果你是从整数映射过来的,那朱迪数组呢?这是一种稀疏的数组…使用字典实现空间的1/4。 朱蒂:
词典:
约1/4的空间:
(我使用的是64位python,btw,所以我的基数可能会因为64位指针而膨胀) |
![]() |
5
2
看看上面的数据,这不是每个整数49个字节,而是25个字节。每个条目的其他24个字节是int对象本身。所以你需要一些比 二十五 每个条目的字节数。除非您还打算重新实现int对象,至少对于键散列是可能的。或者在C中实现它,在C中可以完全跳过对象(这是ZopesIIbtree所做的,如上所述)。 老实说,python字典的调优方式多种多样。打败它并不容易,但祝你好运。 |
![]() |
6
1
我已经实现了我自己的int字典,
available here
(BSD许可证)。简而言之,我使用
实际上,它不仅是一个int-int字典,而且是一个普通的object-int字典,其中的对象被简化为散列值。因此,hash int字典可以用作某些持久存储字典的缓存。 处理“密钥冲突”有三种可能的策略,即尝试为同一密钥分配不同的值。默认策略允许这样做。“删除”将删除该键并将其标记为碰撞,因此任何进一步尝试为其赋值都将无效。“叫喊”策略在任何覆盖尝试和对任何冲突密钥的任何进一步访问期间抛出异常。 请看 my answer 到 a related question 对我的方法有不同的描述。 |