2017-10-28 9 views
0

intで表現できる最大値を記録する定数を探していません。私はintが占有できるメモリの最大量を調べたいと考えています。次のコードを考えてみましょう:私の特定のマシンのPythonのintが占めるバイト数を取得するにはどうすればよいですか?

import sys 

def print_and_execute(*args): 
    for s in args: 
     print(s, end = " == ") 
     r = eval(s) 
     print(r) 
    return 

print_and_execute("type(5) ")  
print_and_execute("sys.getsizeof(5)")  
i = int()  
print_and_execute("i")  
print_and_execute("sys.getsizeof(i)")  
i = 2937  
print_and_execute("i")  
print_and_execute("sys.getsizeof(i)") 
print_and_execute("sys.maxsize") 
print_and_execute("sys.getsizeof(sys.maxsize)") 

を、出力は次のとおりです。

どうやら
type(5) == <class 'int'> 
sys.getsizeof(5) == 28 
i == 0 
sys.getsizeof(i) == 24 
i == 2937 
sys.getsizeof(i) == 28 
sys.maxsize == 9223372036854775807 
sys.getsizeof(sys.maxsize) == 36 

、いくつかのint sが他の人が36どのように多くのバイトを使用し、まだ、他は28あり、24バイトの長さ任意のサイズのintを保持する必要がありますか?

+0

Pythonの整数は、必要に応じて大きくすることができます。換言すれば、上限は利用可能なメモリの量によって決定される。 –

+0

"一部のintは24バイト長です" - 0以外はどれですか? –

答えて

2

任意のサイズを保持するために必要なバイト数はどれですか?int

必要な数だけ必要です。 intのサイズに制限はなく、their documentation状態の任意のサイズです。 *

sys.maxsizeは、intオブジェクトの最大サイズではありません。これは、インデックスの値を保持するために(CPythonで)使用されるPy_ssize_tの最大値です。

例えば、単にmaxsizeより大きいintを作成します。

>>> sys.getsizeof(sys.maxsize * sys.maxsize) 
44 

だから、あなたはそれにgetsizeofを使用することによって与えられたintのためのバイト数を取得しますが。

*結束、、最終的に、利用可能なメモリによって。

関連する問題