Re: Эффективное хранение структур в Python
От: Critical Error ICQ: 123736611
Дата: 23.09.09 00:20
Оценка:
Здравствуйте, 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.