2017-07-11 11 views
0

私はこの原始的なスクリプトを書いた:Pythonの変数のメモリ管理

from sys import getsizeof as g 
x = 0 
s = '' 
while s != 'q': 
    x = (x << 8) + 0xff 
    print(str(x) + " [" + str(g(x)) + "]") 
    s = input("Enter to proceed, 'q' to quit ") 

出力は次のようである - 私はそれを感じるように、そして非常に驚くべき:ように

255     [28] 
65535     [28] 
16777215    [28] 
4294967295    [32] 
1099511627775   [32] 
281474976710655  [32] 
72057594037927935  [32] 
18446744073709551615 [36] 

と。私の主張は:変数xは25バイトのサイズのある種の「オーバーヘッド」を持っているようです。 これはどこから来たのですか? 私に手伝ってもらえるよう、事前に感謝します。

+0

*すべて*はPythonのオブジェクトです。 –

答えて

1

Python intはオブジェクトなので、オーバーヘッドが小さいことは驚くことではありません。 このオーバーヘッドが意味をなさないようになった場合、これはintの実質的なコレクションを操作していることを意味します。numpyライブラリはおそらくあなたが検討すべきものです。

+1

または 'array.array'、または' struct' –

+0

@ juanpa.arrivillagaはい、それらは生の表現には良いですが、numpyは操作のための多くのツールをもたらします。 –

+0

うん、私は同意する。しかし、時々、それらの選択肢はすべてあなたが必要とするものであり、それらは標準ライブラリの一部です。 –