在Python中的sizeof函数

在Python中的sizeof函数

当我们编写大型脚本或代码时,内存管理应该是我们最重要的优先事项。因此,我们应该具备处理内存高效的知识以及良好的编程知识。Python中有许多函数可以获取程序中特定对象在内存中的大小,其中一个是sizeof()函数。在本教程中,我们将学习sizeof()函数及其在Python程序中的工作方式。

Python的sizeof()函数

在Python中,sizeof()函数并不能确切告诉我们对象的大小。它不会返回生成器对象的大小,因为Python无法预先知道生成器的大小。实际上,它返回所占内存的对象的内部大小(以字节为单位)。

为了理解这一点,让我们看一下以下带有无限生成器对象的示例程序。

示例1: 看一下以下Python程序:

# A default function with endless generator object in it
def endlessGenerator():
    # A counting variable to initialize the generator
    counting = 0
    # Using while loop to create an endless generator
    while True:
             yield counting
             counting += 1 # Creating infinite loop
# Printing memory size of a generator object
print("Internal memory size of endless generator object: ", endlessGenerator.__sizeof__())

输出

Internal memory size of endless generator object:  120

解释:

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

现在,我们可以清楚地理解sizeof()函数的工作原理。由于上面程序中的无限生成器对象没有任何结束或断点,Python无法事先告诉我们生成器的大小。但与此同时,我们可以通过sizeof()函数检查生成器对象所占用的内存大小,因为它必定占用一些内部内存。

让我们再来看一个示例,我们使用sizeof()函数来获取内存大小,没有任何额外开销。

示例2:

# Define an empty list in the program
emptyList = []
# Printing size of empty list
print("Internal memory size of an empty list: ", emptyList.__sizeof__())
# Define some lists with elements
a = [24]
b = [24, 26, 31, 6]
c = [1, 2, 6, 5, 415, 9, 23, 29]
d = [4, 5, 12, 3, 2, 9, 20, 40, 32, 64]
# Printing internal memory size of lists
print("Memory size of first list: ", a.__sizeof__())
print("Memory size of second list: ", b.__sizeof__())
print("Memory size of third list: ", c.__sizeof__())
print("Memory size of fourth list: ", d.__sizeof__())

输出

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字节的大小到列表的总内存大小。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程