在 Python 中查找对象使用的内存量
内存通常在计算机系统中设置为一系列二进制数字或位。每个字节都有一个唯一的内存位置,可用于读取或写入字节的值。字节用于存储内存中的数据,可以解释为字符、整数、浮点数或其他数据类型。您可以借助 sys.getsizeof() 和 pympler 的 asizeof() 等工具来测量 Python 中的内存使用情况。
方法 1:使用 Getsizeof() 函数
此函数可确定对象或数据结构所需的内存量。要测量其内存大小的对象作为唯一参数提供。任何类型的对象,包括用户定义的类和实例,都可以作为参数传递。
语法
sys.getsizeof(*objt_name*)
*objt_name* 可以接受任何对象 - 整数、字符串、函数等。
该函数以字节为单位返回给定对象的大小。
算法
导入所需的 sys 模块。
创建一个包含各种数据类型的字典,例如字符串、整数、浮点数、列表和函数。
创建一个函数,该函数以整数 n 作为输入,并返回从 0 到 n-1 的整数列表。
使用 sys.getsizeof() 查找方法 create_nmbr_list 和 my_dictn 的大小。
打印值。
时间复杂度 - O(1)
空间复杂度 - O(n),其中 n 是字典的大小。
以下示例说明了创建一个字典,其中包含列表和 lambda 函数以及其他数据类型。一个使用 getsizeof() 函数生成长整数列表的函数。
示例
import sys # Define a dictionary with various data types my_dictn = { "string": "Tutorials Point", "integer": 662, "float": 3.14, "list": [12, 22, 32, 42, 52], "function": lambda x: x ** 2 } # Define a function that creates list of integers def create_nmbr_list(n): return [i for i in range(n)] # Measure the size of the dictionary and function using sys.getsizeof() print("Size of dictionary using sys.getsizeof(): ", sys.getsizeof(my_dictn)) print("Size of function using sys.getsizeof(): ", sys.getsizeof(create_nmbr_list))
输出
Size of dictionary using sys.getsizeof(): 232 Size of function using sys.getsizeof(): 144
注意 - 内存中项目的数量可能会因多种因素而异,包括其他程序或操作系统当前使用的内存量。
方法 2:使用 Asizeof( ) 函数
此函数由 Pympler 包提供,用于内存分析和优化。与内置的 getsizeof() 函数不同,asizeof() 会考虑目标对象引用的所有对象的内存使用情况。
语法
asizeof(*object_*)
*object_* 可以接受任何对象 - 整数、字符串、函数、布尔值等
该函数以字节为单位返回给定对象及其引用的对象的大小。
算法
导入所需的 pympler.asizeof() 模块。
创建一个名为 my_dict2 的字典,其中包含不同数据类型。
创建函数以生成整数列表。
可以使用 asizeof 函数记录 My_dict2 和 create_int_list 的大小。
使用变量 dictn_size_pympler 和 fnct_size_pympler 打印 my_dict2 和 create_int_list 的大小。
时间复杂度 - O(1)
空间复杂度 - O(n),其中 n 是字典的大小。
以下程序说明了一个包含 lambda 函数和其他数据类型的字典,使用 asizeof 函数查找对象使用的内存。
示例
from pympler.asizeof import asizeof # Define a dictionary with various data types my_dict2 = { "string": "Hello Viewers", "integer": 42, "float": 3.14, "list": [1, 2, 3, 4, 5], "set": {10, 20, 30, 40, 50}, "boolean": True, "function": lambda x: x ** 2, } # Define a function that creates a large list of integers def create_int_list(i): return [x for x in range(i)] # Measure the size of the dictionary and function using pympler.asizeof() dictn_size_pympler = asizeof(my_dict2) fnct_size_pympler = asizeof(create_int_list) # Print the results print("Size of dictionary using pympler.asizeof: ", dictn_size_pympler) print("Size of function using pympler.asizeof: ", fnct_size_pympler)
输出
Size of dictionary using pympler.asizeof: 384 Size of function using pympler.asizeof: 152
结论
Sys.getsizeof() 仅返回项目本身的大小,而 asizeof() 返回对象及其引用的每个对象的大小。因此,asizeof() 可以更清楚地显示对象的内存使用情况。
虽然 sys.getsizeof() 仅返回对象本身的大小,但 asizeof() 会返回程序已导入和使用的每个模块的大小。根据使用的 Python 版本,sys.getsizeof() 的反应可能不同。