CPython 3.3+ 引入 Compact Strings(紧凑字符串),三种内部存储模式,每个字符占用字节由最大码点决定。注意,不是变长的,内部存的是定宽单元

模式单字符单元大小适用码点范围
1‑byte (Latin‑1)1字节U+0000 ~ U+00FF
2‑byte (UCS‑2)2字节U+0100 ~ U+FFFF
4‑byte (UCS‑4)4字节U+10000 ~ U+10FFFF(emoji、生僻字)

举例如下:

s1 = "abc"          # 全部 <= U+00FF → 1字节/字符
s2 = "你好"         # 汉字 U+4F60 > 0xFF,<=0xFFFF → 2字节/字符
s3 = "你好😀"       # 😀 U+1F600 超过0xFFFF → 全部升级为4字节/字符
  • s1:每个字符占1字节
  • s2:每个字符占2字节
  • s3整串全部升级4字节,哪怕只有一个emoji,所有普通汉字也用4字节存储。

这是个关键点:整个字符串统一用同一种单元宽度,不会混合1/2/4字节。只要串里出现一个超大码点,全部字符膨胀到4字节。