Я был удивлен, что sys.getsizeof( 10000*[x] )
составляет 40036 независимо от x: 0, "a", 1000 * "a", {}.
Существует ли deep_getsizeof
который правильно рассматривает элементы, которые разделяют память?
(Вопрос пришел к рассмотрению таблиц базы данных в памяти, таких как
диапазон (1000000) → названия провинций: список или диктофон?)
(Python 2.6.4 на mac ppc.)
Добавлено: 10000 * [ "Миссисипи" ] - 10000 указателей на один "Миссисипи", как отметили несколько человек. Попробуйте следующее:
nstates = [AlabamatoWyoming() for j in xrange(N)]
где AlabamatoWyoming() → строка "Алабама".. "Вайоминг".
Что такое deep_getsizeof (nstates)?
(Как мы можем сказать?
- правильный deep_getsizeof: трудный, ~ gc tracer
- оценка из общего числа vm
- внутреннее знание реализации python
- догадка.
Добавлено 25jan: см. также when-does-python-allocate-new-memory-for-identical-strings