Python 中 len()和 sys.getsizeof()的區別

Neema Muganga 2023年1月30日
  1. Python 中的 len() 函式
  2. Python 中的 sys.getsizeof() 函式
Python 中 len()和 sys.getsizeof()的區別

乍一看,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() 函式之間存在的主要區別在於,前者返回容器內元素的實際長度,而後者返回此物件佔用的記憶體大小。