Python 3.x python3-为什么字符串的大小大于encode
在Python3中,字符串的大小,如Python 3.x python3-为什么字符串的大小大于encode,python-3.x,Python 3.x,在Python3中,字符串的大小,如'test.\uuu sizeof\uu()返回73。但是,如果我将其编码为utf-8,'test'.encode()。\uuuu sizeof\uuuu()返回37 为什么字符串的大小明显大于utf-8中的编码大小?str与编码的字节对象不同,python 3中的字符串通常存储为16位整数而不是字节。这使得字符串的大小增加了一倍。可能还存在一些额外的元数据,使对象进一步膨胀。在CPython中,直到并包括3.2,unicode字符(在3.x中变为str字符)
'test.\uuu sizeof\uu()
返回73
。但是,如果我将其编码为utf-8,'test'.encode()。\uuuu sizeof\uuuu()
返回37
为什么字符串的大小明显大于utf-8中的编码大小?
str
与编码的字节对象不同,python 3中的字符串通常存储为16位整数而不是字节。这使得字符串的大小增加了一倍。可能还存在一些额外的元数据,使对象进一步膨胀。在CPython中,直到并包括3.2,unicode字符(在3.x中变为str字符)被存储为16位或32位无符号整数,具体取决于构建的是“窄”还是“宽”。(在Windows上总是很窄,都在linux上使用)。在3.3及后续版本中,CPython切换到灵活的字符串表示(FSR),根据字符串中“最宽”字符所需的宽度,每个字符使用1、2或4个字节(8、16或32位)。看
对于64位3.4.3,'test.\uuu-sizeof\uuu==53
,而仍然是b'test.\uuu-sizeof\uu==37
。由于两者都使用每个字符1个字节,因此在字符串对象中额外的16个字节是额外的开销。其中一部分是隐藏的规范,说明字符串是使用1、2还是4字节/字符。为便于比较,'tes\u1111.\uuuuuuuuuuuuuuuuuuuuuuuuuof()==82
和'tes\u0001111.\uuuuuuuuuuuuuof()==92
(不,我不知道为什么要跳转到82。可能需要检查代码才能确定。)你知道在哪里可以找到有关此的文档吗?@uday字节
非常简单,是一个字节序列。您可以在中找到一些有关str
的有趣信息