我很想知道Python中的Bytearray和列表之間的內存管理有何不同。Python中的Bytearray和列表之間的區別
我發現了幾個問題,如Difference between bytearray and list,但不完全回答我的問題。
我的問題正是...
from array import array
>>> x = array("B", (1,2,3,4))
>>> x.__sizeof__()
36
>>> y = bytearray((1,2,3,4))
>>> y.__sizeof__()
32
>>> z = [1,2,3,4]
>>> z.__sizeof__()
36
正如我們可以看到有在列表/ array.array之間的尺寸(36個字節爲4種元素)爲4個元件32個字節的差和一個字節數組( )。有人可以向我解釋這是爲什麼嗎?對於字節數組來說它是有意義的,它佔用32
字節的存儲器的4
元素(4 * 8 == 32)
,但是如何解釋list和array.array?
# Lets take the case of bytearray (which makes more sense to me at least :p)
for i in y:
print(i, ": ", id(i))
1 : 499962320
2 : 499962336 #diff is 16 units
3 : 499962352 #diff is 16 units
4 : 499962368 #diff is 16 units
爲什麼兩個連續元素之間的差由16
單位這裏不同,當每個元件僅佔據8
字節。這是否意味着每個內存地址指針指向一個半字節?
內存分配的整數標準是什麼?我讀到Python會根據整數的值(如果我錯了,糾正我)分配更多的內存,就像內存越大的數字越大。
如:
>>> y = 10
>>> y.__sizeof__()
14
>>> y = 1000000
>>> y.__sizeof__()
16
>>> y = 10000000000000
>>> y.__sizeof__()
18
什麼是Python的分配內存的標準是什麼?
爲什麼Python佔用更多內存,而C
只佔用8個字節(我的機器是64位)?當它們完全在整數(2 ** 64)
的範圍內時?
元數據:
Python版本:'3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)]'
機弓: 64位
PS:請指引我的好文章,其中Python的內存管理更好地解釋。我花了將近一個小時的時間來解決這些問題,最終在SO中提出了這個問題。 :(
好問題,upvoted。嘿,你很幸運:在我的Linux Xubuntu 64位機上,CPython 3.4.3'y .__ sizeof __()'給了我''28'給'y = 10','y = 1M','32'爲'y = 10000000000000' – Pynchia
嗨@Pynchia,礦是一個32位的蟒蛇,雖然我的機器是64位。我不確定,但這可能是原因。讓我們等待一些人澄清。 –