Python 2.2 およびPEP 261以降、Python は「ナロー」モードまたは「ワイド」モードでビルドできます。これは、「文字」、つまり「Python Unicode 文字列のアドレス指定可能な単位」の定義に影響します。
ナロー ビルドの文字は、UTF-16 コード単位のように見えます。
>>> a = u'\N{MAHJONG TILE GREEN DRAGON}'
>>> a
u'\U0001f005'
>>> len(a)
2
>>> a[0], a[1]
(u'\ud83c', u'\udc05')
>>> [hex(ord(c)) for c in a.encode('utf-16be')]
['0xd8', '0x3c', '0xdc', '0x5']
(上記は、ナロー ビルドでは UTF-16 ではなく UCS-2 を使用すると主張する一部の 情報源に同意しないようです。非常に興味深い)
Python 3.0 はこの区別を維持していますか? それとも、すべての Python 3 ビルドがワイドですか?
(3.3 で文字列の内部表現を変更するPEP 393について聞いたことがありますが、これは 3.0 ~ 3.2 とは関係ありません。)