正如@Leifingson和@Tim所提到的,这种行为取决于以前做过的事情。为了说明内存消耗,我将使用以下示例:Python 2.7 (r27:82525, Jul 4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> a = {}
>>> for k in xrange(1000000): a['a' * k] = k
...
Traceback (most recent call last):
File "", line 1, in
MemoryError
>>> len(a)
64036
如果我们采用摘要密钥长度:
^{2}$
我们将接近整数溢出!在
棘手的是:>>> import sys
>>> sys.getsizeof(a)
1573004
sys.getsizeof返回不同内容的大小,然后返回dict的所有项。可能是所有键哈希的大小,我不知道。在
之后>>> a = {}
将释放所有2GB的已分配内存,但会使GC(我责怪它)处于某种瘫痪状态。所以执行:>>> for k in xrange(1000000): a[k] = k
将导致:MemoryError
类似于所问的“魔法”数字:>>> len(a)
87382