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

标签 python-3.x memory data-structures

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

  • 字典呈指数级扩展,因此每个字典可能使用其所需内存的两倍。

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

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

最佳答案

基于 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/

相关文章:

python - 在 Python 中使用 glob 查找具有非连续数字的路径名

javascript - 如何将我的 Python 代码上传到我的 WiX 网站?

memory - 在erlang中生成幻方时内存消耗过多 - 需要优化帮助

java - 节省实例变量

memory - 可能的内存问题导致 Hbase Thrift 服务器崩溃

python - Python 3 有 LDAP 模块吗?

data-structures - Fibonacci 堆或 Brodal 队列是否在任何地方的实践中使用?

C++:设计数据结构来存储多键对象集,以便能够收集和遍历该集的超平面

c++ - 如何创建 DAWG?

python - 使用 Python 请求 : Sessions, Cookie 和 POST