1 回答

TA貢獻1826條經(jīng)驗 獲得超6個贊
他們是不一樣的東西可言。
len()查詢?nèi)萜髦邪捻椖繑?shù)。對于字符串,即字符數(shù):
返回對象的長度(項目數(shù))。參數(shù)可以是序列(字符串,元組或列表)或映射(字典)。
sys.getsizeof()另一方面,返回對象的內(nèi)存大?。?/p>
返回對象的大?。ㄒ宰止?jié)為單位)。該對象可以是任何類型的對象。所有內(nèi)置對象都將返回正確的結(jié)果,但是對于第三方擴展,這不一定成立,因為它是特定于實現(xiàn)的。
Python字符串對象不是簡單的字符序列,每個字符1個字節(jié)。
具體來說,該sys.getsizeof()函數(shù)包括垃圾收集器開銷(如果有):
getsizeof()__sizeof__如果對象由垃圾收集器管理,則調(diào)用該對象的方法并添加額外的垃圾收集器開銷。
不需要跟蹤字符串對象(它們不能創(chuàng)建循環(huán)引用),但是字符串對象確實需要更多的內(nèi)存,而不僅僅是每個字符的字節(jié)數(shù)。在Python 2中,__sizeof__方法返回(用C代碼):
Py_ssize_t res;
res = PyStringObject_SIZE + PyString_GET_SIZE(v) * Py_TYPE(v)->tp_itemsize;
return PyInt_FromSsize_t(res);
其中,PyStringObject_SIZE是該類型的C struct標頭大小,PyString_GET_SIZE基本上與相同,len()并且Py_TYPE(v)->tp_itemsize是每個字符的大小。在Python 2.7中,對于字節(jié)字符串,每個字符的大小為1,但這確實PyStringObject_SIZE使您感到困惑;在我的Mac上,大小為37個字節(jié):
>>> sys.getsizeof('')
37
對于unicode字符串,每個字符的大小最多為2或4(取決于編譯選項)。在Python 3.3和更高版本上,Unicode字符串每個字符占用1到4個字節(jié),具體取決于字符串的內(nèi)容。
添加回答
舉報