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
、過去の例では 12 に対して 28 です。したがって、予想されるメモリ使用量は 267Mb で、整数の場合はさらに多くなります。しかし、わずか 40Mb しかかかりません!