我从Heapy得到了这些结果,但是不清楚它们的确切含义。
Index Count % Size % Cumulative % Kind (class / dict of class)
0 262539 59 36961284 48 36961284 48 dict (no owner)
1 65536 15 34340864 45 71302148 93 dict of myobj.Container
2 65536 15 2097152 3 73399300 96 myobj.Container
myobj是一个类,包含大约20个True/False值和20个数字值(这些值都可以存储在2字节中)。
我有一个256*256大小的数组。我真的不明白为什么它们会消耗35或70 MB的内存。如果可能的话,我想将其降低到10 MB以下。
对象内部的许多数据都组织成字典以便于访问。这些字典本身不会改变,而且毫无意义。它们会导致很大的开销吗?
将所有数据打包到1个数字中是否有益,使用位运算符?我应该能够将整个对象的数据存储在32或64字节中。我希望编译器会像其他语言一样自动执行此类操作,但它似乎做了相反的事情。
该类继承内置类型对象,没有任何原因,只是为了使用装饰器。这会导致很大的开销吗?
还好奇“dict(无所有者)”是什么意思,以及它占用了另外一半内存。
编辑:sys.getsizeof(myobj.Container)确实报告了450字节!这太疯狂了。我只使用字典是因为我需要根据索引访问数据。就我所知,编译器应该摆脱这些结构并直接访问值。有更好的方法吗?(我不认为列表是答案)
len(x)
可以返回不同的结果,即使x
是相同的(因为你可以随时替换len
)。 - jfs