繁体   English   中英

为什么列表和紧凑数组中的int大小相同? (24bytes)

[英]Why is an int in a list and in an compact array the same size? (24bytes)

我刚刚读到一个定义为“ i”的compactArray应该产生一个包含2或4个字节的整数的数组,但是执行此代码段我仍然得到24bytes,这与我将使用整数列表一样。

import array
import sys
lowLevelArray = array.array("i", [1,2,3])
print sys.getsizeof(lowLevelArray[0])
pythonList = [1,2,3]
print sys.getsizeof(pythonList[0])

输出:

24

24

因为一旦检索到整数,就必须将其包装在python对象中,以便可以使用它。 python中的一切都是对象,它没有基元的概念(即使底层实现使用它们)。

数组对象更高的空间效率; 它拥有的每个int为4字节,再加上56字节的开销:

>>> sys.getsizeof(array.array("i", [1,2,3])
68L
>>> sys.getsizeof(array.array("i", range(1000))
4056L

但是,当您这样做时

>>> sys.getsizeof(lowLevelArray[0])

它首先计算lowLevelArray[0]这当然返回一个正常整数,然后示出了由使用的尺寸。 这与您还拥有恰好拥有相同值的数组这一事实完全无关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM