Предложение Армина о модуле массива, вероятно, лучше. Два возможных варианта:
- Вы можете создать модуль расширения самостоятельно, который обеспечивает структуру данных, к которой вы стремитесь. Если это действительно что-то вроде коллекции шорт, то
это довольно просто сделать.
- Вы можете
обманывать и манипулировать битами, чтобы
вы храните один номер в
нижняя половина Python int, и
еще один в верхней половине.
Вы бы написали несколько служебных функций
конвертировать в / из них в вашем
структура данных. Ужасно, но это можно заставить работать.
Стоит также понимать, что целочисленный объект Python не 4 байта - это дополнительные издержки. Поэтому, если у вас действительно большое количество шорт, вы можете сэкономить более двух байтов на число, используя каким-либо образом короткую букву C (например, модуль массива).
Некоторое время назад мне приходилось хранить большой набор целых чисел в памяти, а словарь с целочисленными ключами и значениями был слишком велик (у меня было 1 ГБ для структуры данных IIRC). Я переключился на использование дерева IIBTree (от ZODB) и смог установить его. (Целые числа в дереве IIBTree - это настоящие целые числа C, а не целые числа Python, и я взломал автоматический переход на дерево IOBTree, когда число было больше 32 бит).