В Python почему кортеж целых чисел занимает меньше места, чем отдельные целые числа? - PullRequest
3 голосов
/ 23 мая 2011

Вот пример со случайными целыми числами:

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

Почему кортеж занимает меньше места?

Ответы [ 2 ]

13 голосов
/ 23 мая 2011

Число, возвращаемое sys.getsizeof, не включает размер объектов, содержащихся в контейнере.

>>> sys.getsizeof({1:2})
280
>>> sys.getsizeof({'a_really_long_string_that_takes_up_lots_of_space':'foo'})
280
3 голосов
/ 23 мая 2011

Я работаю над 32-битной Windows XP с Python 2.6.2, и я попробовал ваш код, который выглядит следующим образом:

В [15]: a, b, c, d= 79412623, 56529819571, 10431, 30461

В [16]: t = (79412623, 56529819571, 10431, 30461)

В [17]: sys.getsizeof (t) Out [17]]: 44

В [18]: aa, bb, cc, dd = sys.getsizeof (a), sys.getsizeof (b), sys.getsizeof (c), sys.getsizeof (d)

В [19]: сумма ([aa, bb, cc, dd]) Out [19]: 56

...