我很想知道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位。我不确定,但这可能是原因。让我们等待一些人澄清。 –