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

3

以下是一个带有随机整数的示例:

a, b, c, d = 79412623, 56529819571, 10431, 30461
t = (79412623, 56529819571, 10431, 30461)

它们的大小:

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

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

1
下次可能想使用sum(map(sys.getsizeof, (a,b,c,d)))。重复的文本会因为多种原因变得笨拙,例如在这里,行太长了。 - Yann Vernier
2个回答

13

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

>>> sys.getsizeof({1:2})
280
>>> sys.getsizeof({'a_really_long_string_that_takes_up_lots_of_space':'foo'})
280

3
扩展一下,这是因为容器只包含引用。Python不会传递对象本身,并且没有像Java那样的“原始类型”概念;但是一些模块会存储值而不是对象引用,例如数组和numpy。 - Yann Vernier

3
我在一台32位的Windows XP系统上,使用Python 2.6.2版本。我尝试了您的代码,代码如下:
a,b,c,d=79412623, 56529819571, 10431, 30461
t=(79412623, 56529819571, 10431, 30461)
sys.getsizeof(t)返回结果为44
同时,aa, bb, cc, dd = sys.getsizeof(a), sys.getsizeof(b), sys.getsizeof(c), sys.getsizeof(d)
sum([aa,bb,cc,dd]) 返回结果为56

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接