我有大量相同的字典(结构相同:相同的键,不同的值),这导致了两个不同的内存问题:
字典呈指数级扩展,因此每个字典可能使用其所需内存的两倍。
字典需要记录它们的标签,因此每个字典都存储该字典的键,这是大量的内存。
共享标签(因此每个标签不存储在对象中)并压缩内存的好方法是什么?
最佳答案
基于 recordclass 可能会提供以下问题解决方案图书馆:
pip install recordclass
>>> from recordclass import make_dataclass
对于给定的一组标签,您创建一个类:
>>> 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
0.15 版本开始,有一个用于更快创建实例的选项 fast_new
:
>>> DataCls = make_dataclass('DataCls', 'first second third', fast_new=True)
如果不需要关键字参数,则实例创建速度将加快两倍。从 0.22 开始,这是默认行为,并且可以省略选项 fast_new=True
。
P.S.:recordclass库的作者在这里。
关于python-3.x - python 中内存高效的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31663929/