Здравствуйте, meandr, Вы писали:
M>Hello, All!
M>Существуют ли в питоне каке либо средства или библиотеки позволяющие сохранять структуры (подобные c++ структурам) более эффективно (по памяти) нежели представление их через словари? (dict)
M>Ситуация в общем такая у меня есть список (list) структур содержащих в свою очередь несколько вложенных структур. При 100.000 элементах в списке python потребляет 400MB памяти. Мажно ли как нибудь это потребление уменьшить?
Есть стандартный модуль struct — он позволяет создавать структуры из элементов любого типа. Есть еще модуль array, который позволяет создавать массивы только определенного типа.
Вот решил сам ознакомиться с данным вопросом, написал простой тест. Размещаем 100к структур из 20 случайных целых чисел в tuple, struct, array, смотрим на разницу. Тестировал на Python 2.5.
test100k.py:
from time import sleep
from struct import pack
from random import randint
from array import array
def testTuple():
return [tuple((randint(0,100000) for j in xrange(0,20))) for i in xrange(0, 100000)]
format = "i"*20
def testStruct():
return [pack(format, *[randint(0,100000) for j in xrange(0,20)]) for i in xrange(0, 100000)]
def testArray():
return [array("i", [randint(0,100000) for j in xrange(0,20)]) for i in xrange(0, 100000)]
sleep(3)
l = testTuple() # 41 Mb
#l = testStruct() # 14 Mb
#l = testArray() # 16 Mb
sleep(3)
Результат:
testTuple: 41 Mb
testStruct: 14 Mb
testArray: 16 Mb
Массив указателей на 80-байтные структуры на C++ занял бы (80 + 4)*100000 = 8400000 = 8.2Mb