Python 中 len()和 sys.getsizeof()的區別
Neema Muganga
2023年1月30日
2022年5月17日
乍一看,Python 中的 len()
和 sys.getsizeof()
函式似乎具有相同的查詢物件長度的功能。實際上,這兩種方法在實現時具有完全不同的語義含義。
Python 中的 len()
函式
len()
函式用於查詢物件的專案數。物件可以是陣列、佇列、元組或列表。如果在字串上呼叫此方法,它將返回該特定字串中的字元數。
例子:
print(len('Batman'))
輸出:
6
6 是構成 bat 字串的總字元數。
當你對如下所示的專案列表呼叫 len()
函式時,它將返回構成列表的專案總數。
animals = ['Koala', 'Guineapig', 'Bear', 'Zebra', 'Giraffe']
print(len(animals))
輸出:
5
動物列表總共包含五隻動物作為返回的輸出。
Python 中的 sys.getsizeof()
函式
Python 中的 sys 模組提供了一個 sys.getsizeof()
函式,它本質上以位元組為單位返回傳遞給它的物件的記憶體大小。物件的記憶體消耗是什麼,而不是物件引用的記憶體消耗。此函式是特定於實現的,因此,當將內建物件傳遞給它時,它會返回正確的結果。否則,它可能會為第三方擴充套件返回錯誤的結果。
sys.getsizeof()
語法
sys.getsizeof(object[,default])
雖然 object 引數是要查詢其大小的專案,但預設引數允許你定義一個值,如果 object 引數未檢索到大小,則將返回該值。如果物件無法檢索大小並且未提供預設值,則會引發 TypeError
異常。
當你使用 sys.getsizeof()
函式時,它會呼叫物件的 _sizeof_
方法,然後如果垃圾收集器管理該物件,則會增加額外的垃圾收集器開銷。
例子:
import sys
print(sys.getsizeof('hello'))
輸出:
54
輸出以位元組
為單位。這是 hello
佔用的總記憶體大小。
空字串甚至在記憶體中佔用 49 個位元組。
import sys
print(sys.getsizeof(''))
輸出:
49
len()
和 sys.getsizeof()
函式之間存在的主要區別在於,前者返回容器內元素的實際長度,而後者返回此物件佔用的記憶體大小。