python中的内存高效数据结构

时间:2015-07-27 21:50:01

标签: python-3.x memory data-structures

我有大量相同的词典(结构相同:相同的键,不同的值),导致两种不同的内存问题:

  • 字典以指数方式扩展,因此每个字典可以使用最多两倍的内存。

  • 字典需要记录其标签,因此每个字典都存储该字典的密钥,这是一个相当大的内存。

我可以共享标签的好方法是什么(所以每个标签都没有存储在对象中),并压缩内存?

1 个答案:

答案 0 :(得分:1)

基于recordclass库,可以为问题提供以下解决方案:

pip install recordclass

>>> from recordclass import make_class

对于给定的标签集,您可以创建一个类:

>>> DataCls = make_class('DataCls', 'first second third')
>>> data = DataCls(first="red", second="green", third="blue")
>>> print(data)
DataCls(first="red", second="green", third="blue")
>>> print('Memory size:', sys.getsizeof(data), 'bytes')
Memory size: 40 bytes

速度快,占用的内存最少。适用于创建数百万个实例。

缺点:它是C扩展名,不在标准库中。但可以在pypi上使用。

P.S .:记录类库的作者在这里。