1. ホーム
  2. python

[解決済み] Pythonの変数のメモリサイズ [重複]について

2023-07-03 09:46:11

質問

大きな数字の計算をするPythonのコードを書いているのですが、計算で使用するメモリについて重大な懸念があります。

したがって、私は各変数のすべてのビットをカウントしたいです。

例えば、私の場合、変数 x を表現するためのビットの数を数えたいとします。 x .

以下のコードは明らかに無駄です。

x=2**1000
len(x)

したがって、私は次のコードを使用するように回します。

x=2**1000
len(repr(x))

変数 x は(10進数で)です。

10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376

が、上記のコードでは 303

上記の長い長連は長さ302であるため、私は 303 は文字列の長さだけに関係するはずです。

さて、ここで私の最初の質問があります。

どのように私は変数のメモリサイズを知ることができます x ?

もうひとつ、C/C++言語で

int z=1;

のために4バイト=32ビットが割り当てられていることになります。 z に割り当てられ、ビットは00...001(0が31個、1が1個)のように配置されます。

ここで、私の変数 x は巨大ですが、同じメモリ割り当てルールに従うかどうかはわかりません。

どのように解決するのですか?

使用方法 sys.getsizeof を使って、オブジェクトのサイズをバイトで取得します。

>>> from sys import getsizeof
>>> a = 42
>>> getsizeof(a)
12
>>> a = 2**1000
>>> getsizeof(a)
146
>>>

オブジェクトのサイズとレイアウトは純粋に実装に依存することに注意してください。例えばCPythonはIronPythonと全く異なる内部データ構造を使うかもしれません。ですから、オブジェクトのサイズは実装によって異なるかもしれません。