Python 中 len()和 sys.getsizeof()的区别
Neema Muganga
2023年1月30日
乍一看,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()
函数之间存在的主要区别在于,前者返回容器内元素的实际长度,而后者返回此对象占用的内存大小。