在Python中,为什么整数元组比不同的整数占用更少的空间?

kad*_*dam 3 python tuples sizeof

这是一个随机整数的例子:

a, b, c, d = 79412623, 56529819571, 10431, 30461
t = (79412623, 56529819571, 10431, 30461)
Run Code Online (Sandbox Code Playgroud)

它们的尺寸:

import sys
sys.getsizeof(t) # 88
aa, bb, cc, dd = sys.getsizeof(a), sys.getsizeof(b), sys.getsizeof(c), sys.getsizeof(d)
sum([aa,bb,cc,dd]) # 96
Run Code Online (Sandbox Code Playgroud)

为什么元组占用的空间更少?

sen*_*rle 13

返回的数字sys.getsizeof不包括容器包含的对象的大小.

>>> sys.getsizeof({1:2})
280
>>> sys.getsizeof({'a_really_long_string_that_takes_up_lots_of_space':'foo'})
280
Run Code Online (Sandbox Code Playgroud)

  • 为了扩展这一点,那是因为容器只包含引用.Python不会自己传递对象,也没有像Java这样的"原始类型"的概念; 但是有些模块会存储值而不是对象引用,比如array和numpy. (3认同)