Python沒有char或byte類型來保存單一字元或8位元整數。你可以使用長度為1的字串表示字元或8位元整數。
在Python中, string中的每個字元佔的空間大小是bit. (推薦學習:Python影片教學)
>>> import sys >>> sys.getsizeof('') 37 >>> sys.getsizeof('a') 38
可以看到, 空字元佔用37個byte, 長度為1的字串'a' 佔記憶體38個byte. 多了一個字元a 之後多了1 個byte.
在Python 內部, string 是這樣實現的
typedef struct { PyObject_VAR_HEAD long ob_shash; int ob_sstate; char ob_sval[1]; /* Invariants: * ob_sval contains space for 'ob_size+1' elements. * ob_sval[ob_size] == 0. * ob_shash is the hash of the string or -1 if not computed yet. * ob_sstate != 0 iff the string object is in stringobject.c's * 'interned' dictionary; in this case the two references * from 'interned' to this object are *not counted* in ob_refcnt. */ } PyStringObject;
每個char 就是存在ob_sval 裡面的, 佔大小8bit. 餘下的36個byte 主要來自於宏PyObject_VAR_HEAD. 實際上python 的string實作也用到了一個叫*interned 的全域變數, 裡面可以存長度為0 或1 的字串, 也就是char, 可以節省空間並且加快速度.
實際上在python 裡既沒有指針也沒有"裸露的資料結構" (非物件), 連最簡單的整數integer 都是這樣實現的
typedef struct { PyObject_HEAD long ob_ival; } PyIntObject;
總而言之, 這樣的設計滿足python 的"一切都是對♂象♂", "一切都盡可能simple" 的設計思想.
更多Python相關技術文章,請造訪Python教學欄位進行學習!
以上是python不支援的資料型別有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!