在 Python 解释器中查询:
Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> k = [i for i in xrange(9999999)]
>>> import sys
>>> sys.getsizeof(k)/1024/1024
38
>>>
在这里 - 看看它需要多少 RAM:
语句后的内存使用del k
:
之后gc.collect()
:
为什么预期大小为 38Mb 的整数列表需要 160Mb?
UPD: 这部分问题得到了回答(几乎立即和多次:))
好的 - 这是另一个谜语:
Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> str = 'abcdefg'
>>> sys.getsizeof(str)
28
>>> k = []
>>> for i in xrange(9999999):
... k.append(str)
...
>>> sys.getsizeof(str)*9999999/1024/1024
267
你认为它现在会消耗多少?
(来源:i.imm.io)
大小str
为 28,而在过去的示例中为 12。因此,预期的内存使用量为 267Mb - 甚至比整数还要多。但它只需要~40Mb!