有一个方便的函数sys.getsizeof()
(从 Python 2.6 开始)可以帮助解决这个问题:
>>> import sys
>>> sys.getsizeof(1) # integer
12
>>> sys.getsizeof([]) # empty list
36
>>> sys.getsizeof(()) # empty tuple
28
>>> sys.getsizeof((1,)) # tuple with one element
32
从中可以看出,每个整数占用 12 个字节,列表或元组中每个引用的内存为 4 个字节(在 32 位机器上)加上开销(分别为 36 或 28 个字节)。
如果您的结果有长度为 17 的整数元组,那么17*(12+4)+28
每个元组将有 300 个字节。结果本身是一个列表,因此 36 个字节加上每个引用 4 个字节。找出列表的长度(称为 N)以及36+N*(4+300)
所需的总字节数。
编辑:还有另一件事可能会显着影响该结果。Python 根据需要为大多数整数值创建新的整数对象,但对于较小的整数对象(根据经验确定为 Windows 上 Python 2.6.4 上的范围 [-5, 256]),它会预先创建它们并重新使用它们。如果您的大部分值小于 257,这将显着减少内存消耗。(在 Python 上257 is not 257+0
;-))。