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