抜粋翻訳 PEP3137: Immutable Bytes and Mutable Buffer

導入

Python 3.0a1で変更可能なバイト列型を公開して以来、変更不可能なバイト列型を表現する方法を追加せよとの圧力が強まった。

(中略)

古いPyStringの実装を使い、ロケールサポートとユニコードとの間の暗黙の型変換を取り除いて変更不可能なバイト列型とし、新しいPyBytesの実装を変更可能なバイト列型としてとっておく。

長所

変更不可能なバイト列型をもつことの一つの長所は、コードオブジェクトがそれを使うことができることだ。また、バイト列型をキーとするハッシュテーブルを効率的に作成できるようになる。これはHTTPやSMTPのような、バイト列に基づいてテキストを表現するプロトコルのパースに便利である。

バイナリデータ(やエンコードされたテキスト)を扱うPython2.x用のコードの移植は、この新しいデザインでの方が、元の変更可能なバイト列を用いる3.0でのデザインよりも楽である。単にstrをbytesに置き換え、'...'リテラルをb'...'リテラルに置き換えるだけである。

名前

下記のPythonレベルの型名を提案する

  • ``bytes`` は変更不可能なバイトの配列 (PyString)
  • ``bytearray`` は変更可能なバイトの配列 (PyBytes)
  • ``memoryview`` は別のオブジェクトのバイトビュー (PyMemory)

``buffer`` と呼ばれていた古い型はPEP 3118で導入された新しい型 ``memoryview`` に似すぎているので削除される。

要約

    +--------------+-------------+------------+--------------------------+
    | C name       | 2.x    repr | 3.0a1 repr | 3.0a2               repr |
    +--------------+-------------+------------+--------------------------+
    | PyUnicode    | unicode u'' | str     '' | str                   '' |
    | PyString     | str      '' | str8   s'' | bytes                b'' |
    | PyBytes      | N/A         | bytes  b'' | bytearray bytearray(b'') |
    | PyBuffer     | buffer      | buffer     | N/A                      |
    | PyMemoryView | N/A         | memoryview | memoryview         <...> |
    +--------------+-------------+------------+--------------------------+