Python __sizeof__()和getsizeof()方法的区别

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程