従来はUnicodeを使う場合はエンコーディングの指定と「u"Unicodeテキスト"」といった表記が必要だった。3.0ではUnicodeが全面採用されたことでこうした煩雑な記述が不要になっているほか、バグの発生源になっていた処理がエラーとして処理されるように変更された。主な変更点は次のとおり。

  • 従来はUnicode文字列と8ビット文字列といった区分けを使っていたが、3.0ではテキスト(str型)とバイナリデータ(bytes型)という区分けに変わっている。エンコードされたUnicodeを除き、すべてのテキストはUnicodeとして扱われる
  • デフォルトのソースコードエンコーディングはUTF8に設定されている。別のエンコーディングを使うには指定が必要
  • テキストにおけるバックスラッシュは特別な意味を持たなくなった。「\U」や「\u」はエスケープ指定としてではなく、文字通りただのテキストとして処理される
  • 従来はデータを混在できたが、3.0ではテキストとバイナリデータを混在させるとTypeErrorとして処理される。データ混在がバグを生み出す傾向にあったため、混在がエラーとして処理されることでバグの発生を抑制できるようになる効果がある
  • Unicodeに全面移行したことで、従来はUnicodeを表現するために「u"Unicodeテキスト"」の表記をおこなう必要があったが、これが不要となり「"Unicodeテキスト"」で使えるようになった。バイナリデータに対しては「b"バイナリデータ"」を使う必要がある
  • テキストからバイナリデータへの変換: str.encode() または str(b, encoding=...)
  • バイナリデータからテキストへの変換: bytes.decode() または bytes(s, encoding=...)
  • bytes型は書き換え不可能。書き換え可能な型にはbytearray型が用意されており、bytes型を扱うほとんどすべてのAPIはbytearray型も扱える
  • basestring型: 廃止

Pythonは他のメジャープログラミング言語と比較して学習コストが低く、誰が記述しても似たような表記になるという利点があったが、Unicodeの扱いが特別視されていることが採用の障壁になっていたケースもあった。Unicodeに全面移行したことで学習用としても開発用としても採用の幅が広がった。