Python __sizeof__()
和getsizeof()方法的区别
__sizeof__()
方法和getsizeof()方法都用于获取程序中使用的对象的大小。getsizeof()方法返回列表中每个元素的大小以及垃圾回收的额外开销。而sizeof()方法返回对象的实际大小,不包含任何额外开销。在本文中,我们将看到如何在Python中区分这两个运算符。
__sizeof__() 操作符 |
getsizeof() |
---|---|
__sizeof__() 操作符返回对象的大小,不包括垃圾回收的额外开销。 |
getsizeof()操作符返回对象的大小,包括垃圾回收的额外开销。 |
对于空列表,它返回40字节,对于每个额外的列表元素,返回8字节。 | 对于空列表,它返回64字节,对于每个额外的列表元素,返回8字节。 |
它不是系统特定的,对于任何系统都返回相同的值。 | 它是一个系统特定的方法,即该方法的返回值取决于执行它的系统类型。 |
不需要导入sys模块才能执行__sizeof__() 函数。 |
在使用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()函数返回对象的大小,而不会为垃圾回收添加任何额外的开销。