Python 3.x python中高效内存的数据结构

Python 3.x python中高效内存的数据结构,python-3.x,memory,data-structures,Python 3.x,Memory,Data Structures,我有大量相同的字典(结构相同:相同的键,不同的值),这导致了两个不同的内存问题: 字典是以指数方式扩展的,因此每个字典最多可以使用它需要的两倍内存 字典需要记录它们的标签,因此每个字典都存储该字典的键,这是一个相当大的内存量 有什么好方法可以共享标签(因此每个标签都不存储在对象中)并压缩内存?可以根据库提供以下问题解决方案: 对于给定的标签集,可以创建一个类: >>> DataCls = make_dataclass('DataCls', 'first second thi

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

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

  • 字典需要记录它们的标签,因此每个字典都存储该字典的键,这是一个相当大的内存量


有什么好方法可以共享标签(因此每个标签都不存储在对象中)并压缩内存?

可以根据库提供以下问题解决方案:

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

>>> DataCls = make_dataclass('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上可用


附言:recordclass库的作者在这里。

让我们从一个显而易见的问题开始:为什么有“大量相同的词典”?如果它们是相同的,为什么需要不止一个呢?对不起,当我说相同的字典时,我指的是结构,而不是内容。它们都有相同的键,但值不同。我将更新帖子。在这种情况下,只构建一个字典,其中每个项都是一个列表。尽管如此,为什么您需要几个不同的字典,而不是一个dict,其中每个键都指向一个包含所有值的列表?为了切入正题,我怀疑安,我想知道X是什么让你想到这个Y的。@CasimiritHippolyte:那不太理想。从列表中间删除元素(这种情况经常发生)会导致问题。
>>> DataCls = make_dataclass('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