sys.getsizeof
爲不同版本的python返回不同大小的unicode字符串。python sys.getsizeof在不同版本的python上返回不同大小的方法
sys.getsizeof(u'Hello World')
回報96
上Python 2.7.3
並返回72
上Python 2.7.11
sys.getsizeof
爲不同版本的python返回不同大小的unicode字符串。python sys.getsizeof在不同版本的python上返回不同大小的方法
sys.getsizeof(u'Hello World')
回報96
上Python 2.7.3
並返回72
上Python 2.7.11
sys.getsizeof
是給你的實現細節的定義,並沒有這些細節都保證保持版本之間的穩定,甚至建立。
雖然2.7.3和2.7.11之間的任何重大變化是不可能的,你對字符寬度的評論可能解釋了這種差異;包括內部存儲的NUL終止符,Hello World
中有12個字符,並且UCS4編碼需要比UCS2編碼多24個字節來存儲它們(但作爲交換,它可以處理非BMP字符)。在其他情況下,其他可能改變大小的東西是32位與64位構建(在64位構建中所有指針和ssize_t
的大小都是雙倍大小,在非Windows機器上的大小也是long
),Python 2與Python 3(Python 3從公共對象頭中刪除單個指針寬度字段)以及Python 3.2(其使用構建選項指定的固定寬度UCS2或UCS4 str
,與Py2 unicode
相同)與Python 3.3+(其中uses one of three different fixed widths depending on the largest ordinal in the str
,所以一個ASCII/latin-1 str
使用一個字節每個字符,一個BMP str
使用兩個,而一個非BMP str
使用四個,但也可以緩存替代表示,所以相同str
可以增長或縮小「真實「尺寸根據使用情況而定)。
看起來像UCS4和UCS2建立 – YOU
@YOU是一個是用UCS4和其他與UCS2編譯。謝謝。 – Saqib