2015-06-19 34 views
5

以下是我在看:爲什麼單個int 24個字節,但在列表它趨向於8個字節

In [1]: import sys 

In [2]: sys.getsizeof(45) 
Out[2]: 24 

In [3]: sys.getsizeof([]) 
Out[3]: 72 

In [4]: sys.getsizeof(range(1000)) 
Out[4]: 8072 

我知道int在Python是可擴展的(可以得到更大的是24個字節)的對象那些生活在堆上,我明白爲什麼那個對象可能很大,但不是一個列表只是這些對象的集合?顯然它不是,這裏發生了什麼?

回答

8

這是對象的大小 - excluding the objects it contains

>>> d = range(10) 
>>> sys.getsizeof(d) 
152 
>>> d[0] = 'text' 
>>> sys.getsizeof(d) 
152 
>>> d 
['text', 1, 2, 3, 4, 5, 6, 7, 8, 9] 

1000元列表的大小,你的情況,是8072字節,但每個整數對象仍24字節。列表對象跟蹤這些整數對象,但它們不包含在列表對象的大小中。

+0

現在,一切都很有意義。謝謝。這是我的一個愚蠢的疏忽。 – Akavall

7

列表不包含任何整數;它包含指向各種對象的指針,這些對象恰好是整數,並存儲在別處。 getsizeof()告訴你只傳遞給它的對象的大小,而不是它指向的任何附加對象的大小。

1

A list指針集合到對象,而不是對象本身。所以,假設一個64位系統,你的列表有8000字節的指針加上72字節的開銷。

相關問題