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()的反应可能不同。