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

作者:

文章目录
  • 可以使用此函数确定对象或数据结构所需的内存量。需要测量其内存大小的对象是唯一的参数。任何类型的对象(包括用户指定的类和实例)都可以作为参数传递。
  • 此函数由 Pympler 包提供,用于内存分析和优化。与内置的 getsizeof() 函数不同,asizeof() 会考虑目标对象引用的所有对象的内存使用情况。
  • Sys.getsizeof() 仅返回项目本身的大小,而 asizeof() 返回对象及其引用的每个对象的大小。因此,asizeof() 可以更清楚地显示对象的内存利用率。 虽然 sys.getsizeof() 仅返回对象本身的大小,但 asizeof() 返回程序已导入和使用的每个模块的大小。根据所使用的 Python 版本,sys.getsizeof() 可能会做出不同的反应。 到此这篇关于查找Python中对象使用的内存量的两种方法的文章就介绍到这了,更多相关Python查找对象内存内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: 浅析Python的对象拷贝和内存布局 python从内存地址上加载python对象过程详解 Python使用__new__()方法为对象分配内存及返回对象的引用示例 Python实现计算对象的内存大小示例 浅谈Python 对象内存占用 python使用内存zipfile对象在内存中打包文件示例
  • 目录
    • 方法 1:使用 Getsizeof() 函数
      • 语法
      • 算法
      • 示例
      • 输出
    • 方法 2:使用 Asizeof( ) 函数
      • 语法
      • 算法
      • 示例
      • 输出
    • 结论

      计算机系统中的内存通常设置为一系列二进制数字或位。每个字节都有一个唯一的内存位置,可用于读取或写入字节的值。字节可以解释为字符、整数、浮点数或其他数据类型,用于将数据存储在内存中。您可以借助 pympler 内置的 sys.getsizeof() 和 asizeof() 等工具来测量 Python 中的内存使用情况。

      可以使用此函数确定对象或数据结构所需的内存量。需要测量其内存大小的对象是唯一的参数。任何类型的对象(包括用户指定的类和实例)都可以作为参数传递。

      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

      注意 – 内存中项目的大小可能会根据多种因素而变化,包括其他程序或操作系统当前正在使用的内存量。

      此函数由 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查找对象内存内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

      您可能感兴趣的文章:

      • 浅析Python的对象拷贝和内存布局
      • python从内存地址上加载python对象过程详解
      • Python使用__new__()方法为对象分配内存及返回对象的引用示例
      • Python实现计算对象的内存大小示例
      • 浅谈Python 对象内存占用
      • python使用内存zipfile对象在内存中打包文件示例

      站内搜索