#python #sizeof #tuples
#python #sizeof #кортежи
Вопрос:
Вот пример со случайными целыми числами:
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)))
в следующий раз. Повторяющийся текст становится неуклюжим по многим причинам, например, здесь строка была слишком широкой.
Ответ №1:
Число, возвращаемое sys.getsizeof
, не включает размер объектов, содержащихся в контейнере.
>>> sys.getsizeof({1:2})
280
>>> sys.getsizeof({'a_really_long_string_that_takes_up_lots_of_space':'foo'})
280
Комментарии:
1. Чтобы подробнее остановиться на этом, это потому, что контейнеры просто содержат ссылки. Python не передает сами объекты и не имеет понятия «примитивных типов», как Java; но некоторые модули хранят значения вместо ссылок на объекты, такие как array и numpy.
Ответ №2:
Я работаю над 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) Из[17]: 44
В [18]: aa, bb, cc, dd = sys.getsizeof(a), sys.getsizeof(b), sys.getsizeof(c), sys.getsizeof(d)
В [19]: sum([aa, bb, cc, dd]) Из [19]: 56