首頁  >  文章  >  後端開發  >  python不支援的資料型別有哪些

python不支援的資料型別有哪些

(*-*)浩
(*-*)浩原創
2019-06-15 15:00:5320668瀏覽

Python沒有char或byte類型來保存單一字元或8位元整數。你可以使用長度為1的字串表示字元或8位元整數。

python不支援的資料型別有哪些在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:python有重載嗎下一篇:python有重載嗎