gpt4 book ai didi

Python:对象比字典更需要内存吗?

转载 作者:太空狗 更新时间:2023-10-30 01:55:42 25 4
gpt4 key购买 nike

Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
# RAM usage: 2100
>>> class Test:
... def __init__(self, i):
... self.one = i
... self.hundred = 100*i
...
# RAM usage: 2108
>>> list1 = [ Test(i) for i in xrange(10000) ]
# RAM usage: 4364
>>> del(list1)
# RAM usage: 2780
>>> list2 = [ {"one": i, "hundred": 100*i} for i in xrange(10000) ]
# RAM usage: 3960
>>> del(list2)
# RAM usage: 2908

为什么对象列表占用的内存是等效字典列表的两倍?我认为一个对象会更有效率,因为不需要为每个对象存储属性名称的副本。

最佳答案

如果您在 Python 中定义一个类(而不是将其编写为 C 扩展),那么默认情况下它将使用字典来存储其所有属性。这就是为什么它不可能小于字典,以及为什么您可以为大多数 Python 对象分配任意属性。

如果您事先知道您的对象需要哪些属性,您可以使用 __slots__ 属性指定它们[ docs ] 在你的课上。这使得 Python 更加高效,并且不需要为每个对象使用完整的字典。在您的情况下,您可以通过添加

__slots__ = ["one", "hundred"]

class Test: 下面的行中。但是,如果这足以使对象小于字典,我会感到有点惊讶; Python 的字典针对少量值的使用进行了高度优化。 (编辑:我有点惊讶,显然它确实使它们比字典更小。)

关于Python:对象比字典更需要内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7281305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com