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.