1. 程式人生 > >python中int類資料的記憶體大小

python中int類資料的記憶體大小

今天在寫程式的時候希望估算下佔用記憶體的大小,原來從沒有注意過python中整形型別的大小問題,一直以為python中一個int就佔4個Byte.結果發現sys.getsizeof(0)為24,而sys.getsizeof(1)為28.有點迷於是查詢了下資料.

以python3版本為例說明, int 型別在python中是動態長度的。因為python3中int型別是長整型,理論支援無限大的數字,但它的結構其實也很簡單, 在 longintepr.h 中定義:

struct _longobject {
    PyObject_VAR_HEAD
    digit ob_digit[1];
};

這結構是什麼意思呢,重點在於 ob_digit 它是一個數組指標。digit 可認為是 int的別名。python的整型儲存機制是這樣的。比方要表示一個很大的數:123456789 。而每個元素最大隻能表示3位十進位制數(為理解打的比方)。那麼python就會這樣儲存:

ob_digit[0] = 789
ob_digit[1] = 456
ob_digit[2] = 123

低位存於低索引下。python中整型結構中的陣列,每個元素最大儲存 15 位的二進位制數(不同位數作業系統有差異32位系統存15位,64位系統是30位)。

因此,sys.getsizeof(0) 陣列元素為0。此時佔用24位元組(PyObject_VAR_HEAD 的大小)。 sys.getsizeof(456) 需使用一個元素,因此多了4個位元組。有興趣可以看看整型物件的分析:

https://www.hongweipeng.com/i