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() 函数返回对象的大小,不添加任何垃圾回收的额外开销。

更新于:2023年4月17日

4K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.