正如我在 cmets Pythons 中已经提到的,整数是大整数。它们可以保存您希望的任何整数:
>>> a = 1234567890 ** 100
... very long number ...
在 Python 中也很少需要较短的类型,因为(至少 CPython)使用引用计数系统,这意味着所有实例(我的意思是 all)都有一个引用计数(64 位)并且指向类(另一个 64 位)属性的指针。由于 128 位的开销,使用小于 32 或 64 位的整数很少有用。
如果你真的想要这些 C 类型,你可以使用已经包装它们的 NumPy:
>>> import numpy as np
>>> np.short(10)
10
>>> type(np.short(10))
numpy.int16
但是如上所述,标量的内存开销是不值得的。但是,如果您有数组,则此参数不再成立:
>>> import sys
>>> sys.getsizeof(np.short(10))
26 # bytes
>>> arr = np.array([1,2,3,4,5,6,7,8,9,10], dtype=np.short)
>>> arr
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], dtype=int16)
>>> sys.getsizeof(arr)
116 # bytes
这是因为 NumPy 还包装了 C 数组,并且每个数组只有一次引用计数开销 + 类开销(+ 额外开销)(=96 字节):
>>> sys.getsizeof(np.zeros(1000000, dtype=np.short))
2000096