[英]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.