为什么是单个int 24个字节,但在列表中它往往是8个字节

Aka*_*all 5 python

以下是我要看的内容:

In [1]: import sys

In [2]: sys.getsizeof(45)
Out[2]: 24

In [3]: sys.getsizeof([])
Out[3]: 72

In [4]: sys.getsizeof(range(1000))
Out[4]: 8072
Run Code Online (Sandbox Code Playgroud)

我知道int在Python中可以增长(可以变大24个字节)对象,它们存在于堆上,我知道为什么该对象可能非常大,但不仅仅是这些对象的集合列表?显然它不是,这里发生了什么?

Sim*_*ser 8

这是对象的大小 - 不包括它包含的对象:

>>> d = range(10)
>>> sys.getsizeof(d)
152
>>> d[0] = 'text'
>>> sys.getsizeof(d)
152
>>> d
['text', 1, 2, 3, 4, 5, 6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)

在您的情况下,具有1000个元素的列表的大小是8072字节,但每个整数对象仍然是24字节.列表对象跟踪这些整数对象,但它们不包含在列表对象的大小中.


kin*_*all 7

该列表不包含任何整数; 它包含指向各种对象的指针,这些对象恰好是整数,并存储在其他地方.getsizeof()告诉您传递给它的对象的大小,而不是它指向的任何其他对象.