Python中__sizeof__()方法和getsizeof()方法的区别
__sizeof__() 方法和 getsizeof() 方法都用于获取程序中使用的对象的大小。getsizeof() 方法除了返回列表每个元素的大小外,还会返回垃圾回收的额外开销。__sizeof__() 方法返回对象本身的大小,不包含任何额外开销。本文将介绍如何区分 Python 中这两个方法。
__sizeof__() 方法 |
getsizeof() |
|---|---|
__sizeof__() 方法返回对象的大小,不包含垃圾回收的额外开销。 |
getsizeof() 方法返回对象的大小,包含垃圾回收的额外开销。 |
空列表返回 40 字节,每个额外列表元素增加 8 字节。 |
空列表返回 64 字节,每个额外列表元素增加 8 字节。 |
它与系统无关,在任何系统上返回相同的值。 |
它与系统相关,返回值取决于执行它的系统类型。 |
执行 __sizeof__() 函数不需要导入 sys 模块。 |
使用 getsizeof() 方法前需要导入 sys 模块。 |
使用 getsizeof() 方法
getsizeof() 方法内部调用 __sizeof__() 方法,并在返回对象大小时添加垃圾回收的额外开销。它返回空列表 64 字节(取决于系统,可能会有所不同),每个列表元素增加 8 字节。
示例
import sys empty_list=[] a =[34, 22] b =[45, 56, 5, 60] c =[23, 28, 38, 40] d =[2, 3, 1, 4, 66, 54, 45, 89] print(sys.getsizeof(empty_list)) print(sys.getsizeof(a)) print(sys.getsizeof(b)) print(sys.getsizeof(c)) print(sys.getsizeof(d))
输出
56 72 88 88 120
解释
在上面的示例中,我们定义了一个长度分别为 0、2、4、4、8 的列表。当我们使用 __sizeof__() 方法查找列表大小时,空列表的大小返回 56。这取决于我们使用的系统大小。列表中每个额外元素增加 8 字节。因此,包含两个值的列表返回大小为 72 (56+16) 字节。类似地,包含 4、4 和 8 个值的列表 b、c 和 d 分别返回 88、88 和 120 字节的大小。
使用 __sizeof__() 函数
__sizeof__() 函数返回对象的大小,不包含垃圾回收的额外开销。空列表返回 40 字节,列表的每个额外元素增加 8 字节。
示例
w =[1, 2] x =[4, 5, 7, 9] y =[2, 8, 6, 56, 45, 89, 88] z =[54, 45, 12, 23, 24, 90, 20, 40] print(w.__sizeof__()) print(x.__sizeof__()) print(y.__sizeof__()) print(z.__sizeof__())
输出
56 72 104 104
结论
本文讨论了 __sizeof__() 函数和 getsizeof() 方法的区别,这两个方法都用于获取对象的大小。getsizeof() 方法内部调用 __sizeof__() 方法,并添加垃圾回收的额外开销字节。sizeof() 函数返回对象的大小,不添加任何垃圾回收的额外开销。
数据结构
网络
关系型数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP