查找Python中对象使用的内存量的两种方法

 更新时间:2025年12月26日 10:02:20   作者:qq_25153359  
本文介绍了两种测量Python对象内存使用的方法,包括sys.getsizeof()和pympler.asizeof(),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

计算机系统中的内存通常设置为一系列二进制数字或位。每个字节都有一个唯一的内存位置,可用于读取或写入字节的值。字节可以解释为字符、整数、浮点数或其他数据类型,用于将数据存储在内存中。您可以借助 pympler 内置的 sys.getsizeof() 和 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

# 定义一个包含各种数据类型的字典
my_dictn = {
   "string": "Tutorials Point",
   "integer": 662,
   "float": 3.14,
   "list": [12, 22, 32, 42, 52],
   "function": lambda x: x ** 2
}

# 定义一个创建整数列表的函数
def create_nmbr_list(n):
    return [i for i in range(n)]

# 使用 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 的字典,其中包含不同的数据类型。
  • 创建函数以生成整数列表。
  • My_dict2 和 create_int_list 的大小可以是使用 asizeof 函数记录。
  • 使用变量 dictn_size_pympler 和 fnct_size_pympler,打印 my_dict2 和 create_int_list 的大小。

时间复杂度 - O(1)

空间复杂度 - O(n),其中 n 是字典的大小。

以下程序说明了使用 lambda 函数和其他数据类型的字典,使用 asizeof 函数查找对象使用的内存。

示例

from pympler.asizeof import asizeof

# 定义一个包含各种数据类型的字典
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,
}

# 定义一个创建大型整数列表的函数
def create_int_list(i):
    return [x for x in range(i)]

# 使用 pympler.asizeof() 测量字典和函数的大小
dictn_size_pympler = asizeof(my_dict2)
fnct_size_pympler = asizeof(create_int_list)

# 打印结果
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() 可能会做出不同的反应。

到此这篇关于查找Python中对象使用的内存量的两种方法的文章就介绍到这了,更多相关Python查找对象内存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • VSCode配置python环境及中文问题解决方法

    VSCode配置python环境及中文问题解决方法

    这篇文章主要介绍了VSCode配置python环境及中文问题,print打印中文乱码如何解决这个问题呢,本文给大家带来两种方法帮助大家解决这个问题,需要的朋友可以参考下
    2022-02-02
  • python将控制台输出保存至文件的方法

    python将控制台输出保存至文件的方法

    今天小编就为大家分享一篇python将控制台输出保存至文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • python实现移动木板小游戏

    python实现移动木板小游戏

    这篇文章主要为大家详细介绍了python实现移动木板小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • python 将对象设置为可迭代的两种实现方法

    python 将对象设置为可迭代的两种实现方法

    今天小编就为大家分享一篇python 将对象设置为可迭代的两种实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 7个流行的Python强化学习算法及代码实现详解

    7个流行的Python强化学习算法及代码实现详解

    目前流行的强化学习算法包括 Q-learning、SARSA、DDPG、A2C、PPO、DQN 和 TRPO。这些算法已被用于在游戏、机器人和决策制定等各种应用中,本文我们将对其做一个简单的介绍,感兴趣的可以学习一下
    2023-01-01
  • python库geopandas读取写入空间数据及绘图实例探索

    python库geopandas读取写入空间数据及绘图实例探索

    这篇文章主要为大家介绍了python库geopandas读取写入空间数据及绘图实例探索,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪<BR>
    2024-02-02
  • TensorFlow实现保存训练模型为pd文件并恢复

    TensorFlow实现保存训练模型为pd文件并恢复

    今天小编就为大家分享一篇TensorFlow实现保存训练模型为pd文件并恢复,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python使用进程池并发执行SQL语句的操作代码

    Python使用进程池并发执行SQL语句的操作代码

    Python的进程池是一种并发工具,它允许我们将任务分发给一组工作进程,这些进程可以同时运行并共享一个进程池,本文给大家介绍了Python使用进程池并发执行SQL语句的操作代码,需要的朋友可以参考下
    2024-10-10
  • Python实现多智能体协作的实战教程

    Python实现多智能体协作的实战教程

    一个 Agent 解决不了的问题,就组一个队,本文将带大家使用 Python 从零搭建多智能体协作系统,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2026-04-04
  • Python数据结构链表操作从基础到高级实例深究

    Python数据结构链表操作从基础到高级实例深究

    链表是一种基础的数据结构,它由一系列节点组成,每个节点都包含数据和指向下一个节点的引用,在Python中,可以使用类来实现链表,本文将介绍如何实现链表,并提供一些丰富的示例代码来帮助你更好地理解其原理和应用
    2023-12-12

最新评论