質問
Pythonでは、int型は使える桁数が無制限だと聞きました。
しかし、メモリによってその上限が変わるため
自分の使っているiPad Proではどこまでできるかを調べようと思いました。
以下が実際にギリギリアプリがクラッシュせずに出力できた結果です。
Python
1 2import sys 3 4n = 35957779898 5 6print(sys.getsizeof(1<<n) 7 8# > 4794370680
ドキュメントには「getsizeofはobjectのサイズをバイトで返す」
と書かれていたので、およそ4.79GB消費したら限界を迎えるという結果が分かりました。
Pythonではint型オブジェクトが生成された時に
デフォルトで28bitのメモリを消費するらしいので調べてみたところ
Python
1import sys 2 3print(sys.getsizeof(1)) 4 5# > 28
👆このような結果になりました。
これは「28bit」ではなく「28byte」なのでしょうか?
同じ方法でメモリサイズを調べているサイト記事では
「28bit」と書かれていました。
自分的には「28bit」だと納得できます。
「1」が「28byte」ものメモリサイズがあるとは思えません。
なぜバイトで返すと書かれているのに
「3.5(byte)」などではなく「28」と出力されるのでしょうか?
追記
Python
1 2import sys 3 4print(sys.getsizeof(1<<32))
この実行結果が「32」になるため
「32bitか」→「28は28bitか」と勘違いしたのかもしれません。
1<<32
は33桁の2進数になるため、メモリサイズが4byte分拡張されて
24byte
+ 4byte
+ 4byte
= 32byte
になるのなら辻褄が合いますね。
あとは24byte
のPyVarObject
が理解できればいいのですが
これはどういうものだと解釈すれば良いでしょうか?
オブジェクトを生成する際に、全ての型の元になっている型を
宣言せずに自動的に呼び出しているということでしょうか?
