python中getsizeof和asizeof的区别小结

 更新时间:2025年09月17日 09:51:29   作者:Lumiron  
本文详细的介绍了getsizeof和asizeof的区别,这两个函数都用于获取对象的内存占用大小,它们来自不同的库,下面就来详细的介绍一下两者的区别,感兴趣的可以了解一下

sys.getsizeof (Python 内置)

1、来源: Python 标准库的 sys 模块
2、功能: 返回对象的"直接"内存占用,不包括对象引用的其他对象
3、特点:
3.1、只计算对象本身的大小
3.2、对于容器类型(list, dict等),不计算容器内元素的大小
3.3、是Python内置函数,无需额外安装

pympler.asizeof.asizeof (第三方库)

1、来源: Pympler 库的 asizeof 模块
2、功能: 递归计算对象及其所有引用对象的总内存占用
3、特点:
3.1、递归计算所有引用对象的大小
3.2、对于容器类型,会计算容器内所有元素及其引用的大小
3.3、需要安装 pympler 包 (pip install pympler)

使用场景

1、使用 sys.getsizeof 当你想知道对象本身的内存占用
2、使用 asizeof.asizeof 当你想知道对象及其所有引用对象的完整内存占用
对于复杂数据结构,asizeof 通常能给出更准确的总内存使用情况。

In [88]: aa=["a"]

In [89]: getsizeof(aa)
Out[89]: 64

In [90]: hex(id(aa))
Out[90]: '0x24ca6152480'

In [91]: getsizeof(aa[0])
Out[91]: 50

In [92]: hex(id(aa[0]))
Out[92]: '0x24ca2104cf0'

1、getsizeof和id的对像是一样的,也就是说getsizeof获取的不是这个列表以及所有内容在内存中的有效占用空间,而仅仅是这个列表表头的占用空间。

这是表头,即aa,选中的是他的元素表

这里大概就是存储相关指针的一段空间

这是元素aa[0]

In [93]: aa.__iadd__("b")
Out[93]: ['a', 'b']

In [95]: getsizeof(aa)
Out[95]: 96

In [96]: hex(id(aa))
Out[96]: '0x24ca6152480'

In [98]: aa[1]="bb"

In [100]: getsizeof(aa)
Out[100]: 96

指针地址没变,但是长度变了,至于后面多出的长度描述了什么,未知。但第二行标志着有多少个元素,第二行后段仍是元素指针的地址

这里的指针应该是单纯的信息,前后无其他描述信息,靠着上上图中的元素数量索引

第一次增加元素,赋值为b,第二次增加aa[1]的长度,但aa的size未变,aa的size至与元素数量有关,也可能与元素类型有关。

看到列表了,里面有个函数

__sizeof__(self, /)
Return the size of the list in memory, in bytes.

好奇探究,又做了无意义的事!

到此这篇关于python中getsizeof和asizeof的区别小结的文章就介绍到这了,更多相关python getsizeof asizeof 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例

    python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例

    这篇文章主要介绍了python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例,需要的朋友可以参考下
    2020-02-02
  • Python中pymodbus模块详细讲解

    Python中pymodbus模块详细讲解

    pymodbus是一个基于Python的开源库,用于实现Modbus通信协议,Modbus是一种广泛应用于工业自动化领域的串行通信协议,支持主从架构,这篇文章主要介绍了Python中pymodbus模块的相关资料,需要的朋友可以参考下
    2026-02-02
  • pytorch 如何在GPU上训练

    pytorch 如何在GPU上训练

    这篇文章主要介绍了pytorch 如何在GPU上训练的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • python中的django是做什么的

    python中的django是做什么的

    在本篇文章里小编给大家整理了关于python中的django作用以及相关基础知识点,需要的朋友们学习下。
    2020-07-07
  • Python3 pickle模块的使用方法详细介绍

    Python3 pickle模块的使用方法详细介绍

    pickle提供了一个简单的持久化功能。可以将对象以文件的形式存放在磁盘上,pickle序列化后的数据,可读性差,人一般无法识别,本文详细介绍了pickle模块的使用方法
    2021-10-10
  • 如何使用Python破解ZIP或RAR压缩文件密码

    如何使用Python破解ZIP或RAR压缩文件密码

    这篇文章主要介绍了如何使用Python破解ZIP或RAR压缩文件密码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • python遍历路径破解表单的示例

    python遍历路径破解表单的示例

    这篇文章主要介绍了python遍历路径破解表单的示例,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-11-11
  • Python实现批量读取word中表格信息的方法

    Python实现批量读取word中表格信息的方法

    这篇文章主要介绍了Python实现批量读取word中表格信息的方法,可实现针对word文档的读取功能,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • python用线性回归预测股票价格的实现代码

    python用线性回归预测股票价格的实现代码

    这篇文章主要介绍了python用线性回归预测股票价格的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 在pycharm下设置自己的个性模版方法

    在pycharm下设置自己的个性模版方法

    今天小编就为大家分享一篇在pycharm下设置自己的个性模版方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07

最新评论