Type | Size (Bytes) |
---|---|
bool | 24 |
bytearray | 48 |
bytes | 37 |
complex | 32 |
dict | 280 |
float | 24 |
frozenset | 232 |
int | 24 |
list | 72 |
long | 24 |
object | 16 |
property | 88 |
set | 232 |
str | 37 |
tuple | 56 |
unicode | 52 |
可以看到萬物基礎的object物件,其初始大小是16 bytes,其他物件都是繼承至object類別,因此物件不會比「object」小。最大的型別物件是280 bytes,dict用起來非常方便,用key就能取得value,但要注意「成本」,撰寫程式時務必選擇適當的型別,才不會造成記憶體的浪費(雖然,現在記憶體都是1~2GB以上)。
從這個表格也可以看到一件事,可變更(mutable)的物件普遍比不可變更(immutable)來得大,例如「list」比「tuple」大,而「bytearray」比「str」大,如果撰寫程式時不會變更其值,不妨使用較「經濟」的型別!
計算上述物件成本是用程式撰寫而產生,其程式碼如下:
if __name__ == "__main__": import types import sys tbody='<tr><th>Type</th><th>Size (Bytes)</th></tr>' for item in dir(__builtins__): attr = getattr(__builtins__, item) if type(attr) is types.TypeType and \ not issubclass(attr, BaseException): try: obj =attr() tbody +='<tr><td>%s</td><td>%s</td></tr>' %\ (item, sys.getsizeof(obj)) except TypeError: pass table = '<table border="1" cellpadding="5" style="width: 80%%;">%s</table>' % tbody print table
###