Pythonは、基盤となるシステムアーキテクチャに基づいて整数を自動的に割り当てます。残念ながら、メモリに完全にロードする必要がある巨大なデータセットがあります。
それで、Pythonがいくつかの整数(C++ 'short'に相当)に2バイトだけを使用するように強制する方法はありますか?
いいえ。ただし、配列では短整数を使用できます。
from array import array
a = array("h") # h = signed short, H = unsigned short
値がその配列にある限り、それは短整数になります。
'array'モジュールを指摘してくれたArminに感謝します。また、cスタイルの構造体を文字列にパックする「struct」モジュールも見つかりました。
ドキュメントから( https://docs.python.org/library/struct.html ):
>>> from struct import *
>>> pack('hhl', 1, 2, 3)
'\x00\x01\x00\x02\x00\x00\x00\x03'
>>> unpack('hhl', '\x00\x01\x00\x02\x00\x00\x00\x03')
(1, 2, 3)
>>> calcsize('hhl')
8
アレイモジュールに関するArminの提案はおそらく最良です。 2つの可能な選択肢:
Python整数オブジェクトは4バイトではなく、追加のオーバーヘッドがあることも理解しておく価値があります。したがって、ショートの数が非常に多い場合は、次の方法で数値ごとに2バイト以上節約できます。何らかの方法でCshortを使用します(例:アレイモジュール)。
しばらく前に大量の整数のセットをメモリに保持する必要があり、整数のキーと値を持つ辞書が大きすぎました(データ構造IIRCに1GBを使用できました)。 IIBTree(ZODBから)の使用に切り替えて、なんとか適合させました。 (IIBTreeのintは実数のC intであり、Python整数であり、数値が32ビットより大きい場合はIOBTreeへの自動切り替えをハックしました)。