我瞎搞與sys.getsizeof
和有點驚訝,當我到列表和數組:什麼導致python列表的(大)大小?
>>> from sys import getsizeof as sizeof
>>> list_ = range(10**6)
>>> sizeof(list_)
8000072
相比數組:
>>> from array import array
>>> array_ = array('i', range(10**6))
>>> sizeof(array_)
56
原來整數列表趨向的大小它的所有元素的大小的1/3,所以它不能阻礙他們:
>>> sizeof(10**8)
24
>>> for i in xrange(0,9):
... round(sizeof(range(10**i))/((10**i) * 24.0), 4), "10**%s elements" % (i)
...
(3.3333, '10**0 elements')
(0.6333, '10**1 elements')
(0.3633, '10**2 elements')
(0.3363, '10**3 elements')
(0.3336, '10**4 elements')
(0.3334, '10**5 elements')
(0.3333, '10**6 elements')
(0.3333, '10**7 elements')
(0.3333, '10**8 elements')
是什麼原因導致這種行爲,既list
很大,但沒有它的所有元素那麼大,array
是如此之小?
首先,列表的sys.getsizeof()不*測量被引用對象佔用多少內存。它只是**列表對象本身。 –
這是Python 2還是3?對我來說,數組的內存大小是'4000056L'。 –
linux2上的Python 2.7.3 [GCC 4.7.2](在Debian上運行,Linux 3.2.0-4-amd64) – Alex