Python 中的 sizeof

2024 年 8 月 29 日 | 阅读 3 分钟

当我们编写大型脚本或大量代码时,内存管理应该是我们的首要任务。因此,除了良好的编程知识外,我们还应该了解如何高效地处理内存。Python 中有许多函数可用于获取程序中特定对象的内存大小,其中一个函数就是 __sizeof__()。在本教程中,我们将了解 __sizeof__() 函数及其在 Python 程序中的工作原理。

Python __sizeof__() 函数

Python 中的 __sizeof__() 函数并不精确地告诉我们对象的大小。它不返回生成器对象的大小,因为 Python 无法预先告知生成器将占用多少大小。尽管如此,实际上,它返回特定对象(以字节为单位)在内存中占用的内部大小。

为了理解这一点,让我们来看一个包含无限生成器对象的示例如下。

示例 1:来看以下 Python 程序

输出

Internal memory size of endless generator object:  120

说明

我们使用了一个默认函数,即 endlessGenerator(),来创建程序中的一个无限生成器对象。在该函数中,我们初始化了一个变量,即 counting = 0。我们对 counting 变量使用了 while 循环,而没有给循环设置断点。通过在函数中创建无限循环,我们将默认函数变成了一个无限生成器对象。最后,我们使用 __sizeof__() 函数打印了无限生成器对象的内部内存大小。

现在,我们可以清楚地理解 __sizeof__() 函数的功能。由于上述程序中的无限生成器对象没有结束或断点,Python 无法提前告知我们生成器的大小。但同时,我们可以通过 __sizeof__() 函数检查分配给生成器对象的内部内存大小,因为它在 Python 中必然占用了一些内部内存。

让我们再看一个示例,我们在其中使用 __sizeof__() 函数来获取没有任何开销的内部内存大小。

示例 2

输出

Internal memory size of an empty list:  40
Memory size of first list:  48
Memory size of second list:  104
Memory size of third list:  104
Memory size of fourth list:  136

说明

使用 __sizeof__() 函数,我们可以清楚地看到,一个空列表的内部内存大小是 40 字节,并且列表中的每个元素都会为列表的总内存大小增加 8 字节。