Запрос в интерпретаторе 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
>>>
А вот - посмотрите, сколько нужно от оперативной памяти:
Использование памяти после оператора del k
:
И после gc.collect()
:
Почему список целых чисел с ожидаемым размером 38 МБ занимает 160 МБ?
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 в прошлом примере. Таким образом, ожидаемое использование памяти составляет 267 МБ - даже больше, чем с целыми числами. Но это займет всего ~ 40 Мб!