【Python】获取变量占用的内存大小

这篇具有很好参考价值的文章主要介绍了【Python】获取变量占用的内存大小。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

记录一下,查看python运行当前范围内的变量、方法和定义的类型 会占用多少memory

准备工作

借助内置模块 sysgetsizeof即可。

看到该函数的介绍,返回字对象的字节大小。

def getsizeof(p_object, default=None): # real signature unknown; restored from __doc__
    """
    getsizeof(object [, default]) -> int
    
    Return the size of object in bytes.
    """
    return 0

使用起来也很简单,只需要将任意对象传到 getsizeof 就可以了。

from sys import getsizeof as getsize
var = object()
print(getsize(var))

使用

计算所占用内存,单位为 KB || MB

  • bytes转换为kb或mb
  • 这个方法只取两位小数
def binary_conversion(var: int):
    """
    二进制单位转换
    :param var: 需要计算的变量,bytes值
    :return: 单位转换后的变量,kb 或 mb
    """
    assert isinstance(var, int)
    if var <= 1024:
        return f'占用 {round(var / 1024, 2)} KB内存'
    else:
        return f'占用 {round(var / (1024 ** 2), 2)} MB内存'

查看当前变量占用内存的大小

下面的方法是查看当前的运行环境所有的变量和方法所占用的内存。
可以从下图中看到多数内置的函数,占不到多少内容。


# 返回当前范围内的变量、方法和定义的类型列表
keys = dir()

for variable in keys:
    print(variable, binary_conversion(getsize(eval(variable))), '\n')

【Python】获取变量占用的内存大小

生成器和列表你会怎么选?

一个装有0~1亿的生成器和列表,它们所占用的memory 如下图所示。

  • 生成器占用的内存为 0.1KB
  • 列表占用的内存为 762.94MB

所以在针对这种情况时候,选择哪种迭代器应该了然于心了吧!

# 生成器
var_a = (_ for _ in range(100000000))
print(f'变量{"var_a"}, 类型为{type(var_a)}, 占用{binary_conversion(getsize(var_a))}')

# 列表
var_b = list(range(100000000))
print(f'变量{"var_b"}, 类型为{type(var_b)}, 占用{binary_conversion(getsize(var_b))}')

【Python】获取变量占用的内存大小

后话

本文具体用处不大,但也记录一下。
本次到此结束,有问题请利用强大的搜索引擎,自行解决。文章来源地址https://www.toymoban.com/news/detail-427496.html

到了这里,关于【Python】获取变量占用的内存大小的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 获取对象占用内存

    添加依赖 添加vm启动参数 编写测试代码

    2024年02月09日
    浏览(36)
  • 案例15-ArrayList线程不安全,共用全局变量导致数据错乱问题,占用内存情况

    存入redis的值,可能会出现错误的情况。如果出现错误,接口将会报错。 多个方法一起修改一个 公共变量 的值,造成数据混乱,导致存入redis中的key值错误 还有每次登陆都会重现创建一个对象,放到公共变量中,遇到并发,对象会被大量地创建, 上一个对象会失去引用,等

    2024年02月02日
    浏览(42)
  • Sql Server 占用内存高,不释放内存,数据库连接不上 问题处理记录

    项目上反应生产线箱码不能上传到我们系统,我们的WMS软件退出后重新登录也一直登录失败,并且服务器上数据库占用内存过高,SSMS数据库连接不上。 好家伙SQL Server占用了34个G内存。 接口日志中连接数据库报错:System.Data.SqlClient.SqlException: 当前命令发生了严重错误。应放弃

    2024年02月14日
    浏览(79)
  • # Unity 如何获取Texture 的内存大小

    在Unity中,要获取Texture的内存文件大小,可以使用UnityEditor.TextureUtil类中的一些函数。这些函数提供了获取存储内存大小和运行时内存大小的方法。由于UnityEditor.TextureUtil是一个内部类,我们需要使用反射来访问它。 导入UnityEditor命名空间和System.Reflection命名空间: 创建一个函

    2024年02月12日
    浏览(43)
  • 在嵌入式Linux中使用C++读取 /proc/meminfo 文件来获取系统内存大小

    在嵌入式Linux中,可以使用C++编程语言通过读取  /proc/meminfo  文件来获取系统内存大小。以下是一个示例代码片段: 上述代码打开  /proc/meminfo  文件并逐行读取其中的内容。当找到以 \\\"MemTotal:\\\" 开头的行时,提取出内存大小信息并去除空格和单位(KB),然后将其转换为无符

    2024年02月10日
    浏览(45)
  • python实现监控指定进程的CPU利用率、内存占用

            因为需要一直关注被测软件的CPU利用率和内存占用,人工记录十分麻烦,所以想做一个应用程序来代替手工记录。 思路: 1.弹窗,输入进程号 2.获取进程对象 3.日志保存在一个csv文件中,文件命名方式为:进程名+Process+进程号 4.文件第一行写入进程名,第二行表

    2023年04月12日
    浏览(44)
  • python使用迭代生成器yield减少内存占用的方法

    在python编码中for循环处理任务时,会将所有的待遍历参量加载到内存中。 其实这本没有必要,因为这些参量很有可能是一次性使用的,甚至很多场景下这些参量是不需要同时存储在内存中的,这时候就会用到本文所介绍的迭代生成器yield。 首先我们用一个例子来演示一下迭代

    2024年04月28日
    浏览(31)
  • 在python中实现使用迭代生成器yield减少内存占用的方法

    在python编码中for循环处理任务时,会将所有的待遍历参量加载到内存中。其实这本没有必要,因为这些参量很有可能是一次性使用的,甚至很多场景下这些参量是不需要同时存储在内存中的,这时候就会用到本文所介绍的迭代生成器yield。 首先我们用一个例子来演示一下迭代

    2024年02月11日
    浏览(38)
  • python中使用selenium进行爬虫时,导致(内存已缓存)备用内存占用过大导致崩溃问题,3个解决方案

    在使用python进行爬虫的时候,使用selenium进行爬取的时候经常会出现已缓存过大的情况,如果缓存出现过大之后再次执行的话就会计算机拒绝,但是这个时候我们的内存又有很多空间可以使用,一开始我以为是占用文件过多然后点360的那个进行文件整理和清理垃圾,结果效果

    2023年04月08日
    浏览(52)
  • Python获取图片的大小/尺寸

    结果打印: (534, 300) 534 300 JPEG ** ** (1)、安装扩展 pip install opencv-python (2)、代码 打印结果: (300, 534, 3)

    2024年02月11日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包