Армина модуля массива, вероятно, лучше всего. Возможны две альтернативы:
- Вы можете самостоятельно создать модуль расширения, который предоставляет структуру данных, которые вы используете. Если это действительно что-то вроде коллекции шорт, то это довольно просто.
- Вы можете обманывать и манипулировать битами, так что вы храните один номер в нижней половине междунар Python и еще один в верхней половине. Вы должны написать некоторые служебные функции для преобразования в/из них в пределах вашей структуры данных . Уродливо, но можно заставить работать.
Также стоит понимать, что целочисленный объект Python не имеет 4 байта - есть дополнительные накладные расходы. Поэтому, если у вас действительно очень много коротких замыканий, вы можете сэкономить более двух байтов на число с помощью короткого ключа C (например, модуля массива).
Мне пришлось хранить большой набор целых чисел в памяти некоторое время назад, а словарь с целыми ключами и значениями был слишком большим (у меня было 1 ГБ для структуры данных IIRC). Я переключился на использование IIBTree (от ZODB) и сумел подогнать его. (Ints в IIBTree являются реальными C ints, а не целыми числами Python, и я взломал автоматический переключатель в IOBTree, когда число было больше 32 бит).
только хэдз-ап: короткая ширина C++ не 2 байта. Это зависит от реализации. – user3063349 2017-06-23 15:52:48
Если вы делаете какие-либо манипуляции с этим огромным набором данных, вы, вероятно, захотите использовать [Numpy] (http://numpy.scipy.org/ «Домашняя страница Numpy»), которая поддерживает широкий спектр числовых типов и эффективные операции с массивами из них. – giltay 2008-09-23 13:20:30