getsizeof возвращает одно и то же значение для, казалось бы, разных списков
У меня есть следующее двухмерное растровое изображение:
num = 521
arr = [i == '1' for i in bin(num)[2:].zfill(n*n)]
board = [arr[n*i:n*i+n] for i in xrange(n)]
Просто для любопытства я хотел проверить, сколько еще места займет, если в нем будут целые числа вместо логических. Поэтому я проверил текущий размер сsys.getsizeof(board)
и получил104
После этого я модифицировал
arr = [int(i) for i in bin(num)[2:].zfill(n*n)]
, но все же получил104
Тогда я решил посмотреть, сколько я получу с помощью только строк:
arr = [i for i in bin(num)[2:].zfill(n*n)]
, который все еще показывает104
Это выглядит странно, потому что я ожидал, что список списков строк будет тратить больше памяти, чем просто логические значения.
Видимо, я что-то упускаю из-за того, как getsizeof вычисляет размер. Может кто-нибудь объяснить мне, почему я получаю такие результаты.
Постскриптум благодаря ответу Zehnpard, я вижу, что я могу использоватьsum(sys.getsizeof(i) for line in board for i in line)
примерно посчитать память (скорее всего она не будет считать списки, что не так уж важно для меня). Теперь я вижу разницу в числах для string и int / bool (без разницы для int и boolean)