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
Run Code Online (Sandbox Code Playgroud)
为什么对象列表的内存量是等效词典列表的两倍?我认为一个对象会更有效率,因为不需要为每个对象存储属性名称的副本.
小智 10
如果您在Python中定义一个类(而不是将其编写为C扩展),那么默认情况下它将使用字典来存储其所有属性.这就是为什么它不可能小于字典,以及为什么你可以为大多数Python对象分配任意属性.
如果您事先知道对象需要哪些属性,则可以使用类中的[ docs ]__slots__属性指定它们.这允许Python更高效,并且不需要每个对象的完整字典.在您的情况下,您可以通过添加来完成此操作
__slots__ = ["one", "hundred"]
Run Code Online (Sandbox Code Playgroud)
在下面的行class Test:.但是,如果这足以使对象比字典小,我会有点惊讶; Python的字典经过高度优化,可用于少量值.(编辑:我有点惊讶,显然它确实使它们比字典小.)
| 归档时间: |
|
| 查看次数: |
332 次 |
| 最近记录: |