Python 中 len()和 sys.getsizeof()的区别

Neema Muganga 2023年1月30日 2022年5月17日
  1. Python 中的 len() 函数
  2. Python 中的 sys.getsizeof() 函数
Python 中 len()和 sys.getsizeof()的区别

乍一看,Python 中的 len()sys.getsizeof() 函数似乎具有相同的查找对象长度的功能。实际上,这两种方法在实现时具有完全不同的语义含义。

Python 中的 len() 函数

len() 函数用于查询对象的项目数。对象可以是数组、队列、元组或列表。如果在字符串上调用此方法,它将返回该特定字符串中的字符数。

例子:

print(len('Batman'))

输出:

6

6 是构成 bat 字符串的总字符数。

当你对如下所示的项目列表调用 len() 函数时,它将返回构成列表的项目总数。

animals = ['Koala', 'Guineapig', 'Bear', 'Zebra', 'Giraffe']
print(len(animals))

输出:

5

动物列表总共包含五只动物作为返回的输出。

Python 中的 sys.getsizeof() 函数

Python 中的 sys 模块提供了一个 sys.getsizeof() 函数,它本质上以字节为单位返回传递给它的对象的内存大小。对象的内存消耗是什么,而不是对象引用的内存消耗。此函数是特定于实现的,因此,当将内置对象传递给它时,它会返回正确的结果。否则,它可能会为第三方扩展返回错误的结果。

sys.getsizeof() 语法

sys.getsizeof(object[,default])

虽然 object 参数是要查找其大小的项目,但默认参数允许你定义一个值,如果 object 参数未检索到大小,则将返回该值。如果对象无法检索大小并且未提供默认值,则会引发 TypeError 异常。

当你使用 sys.getsizeof() 函数时,它会调用对象的 _sizeof_ 方法,然后如果垃圾收集器管理该对象,则会增加额外的垃圾收集器开销。

例子:

import sys
print(sys.getsizeof('hello'))

输出:

54

输出以字节为单位。这是 hello 占用的总内存大小。

空字符串甚至在内存中占用 49 个字节。

import sys
print(sys.getsizeof(''))

输出:

49

len()sys.getsizeof() 函数之间存在的主要区别在于,前者返回容器内元素的实际长度,而后者返回此对象占用的内存大小。