## 3.14.2 データストリームの形式

`pickle` が使うデータ形式は Python 特有です。そうする ことで、XDRのような 外部の標準が持つ制限 (例えば XDR ではポインタの共有を表現できません) を課せられることがないという利点があります; しかしこれは Python で書かれていないプログラムが pickle 化された Python オブジェクトを 再構築できない可能性があることを意味します。

標準では、`pickle` データ形式では印字可能な ASCII 表現を 使います。これはバイナリ表現よりも少しかさばるデータになります。 印字可能な ASCII の利用 (とその他の `pickle` 表現形式が 持つ特徴) の大きな利点は、デバッグやリカバリを目的とした場合に、 pickle 化されたファイルを標準的なテキストエディタで読めるという ことです。

現在、pickle化に使われるプロトコルは、以下の 3 種類です。

- バージョン 0 のプロトコルは、最初の ASCII プロトコルで、以前のバージョンのPython と後方互換です。

- バージョン 1 のプロトコルは、古いバイナリ形式で、以前のバージョンの Python と後方互換です。

- バージョン 2 のプロトコルは、Python 2.3 で導入されました。新しいスタイルのクラスを、より効率よく piclke 化します。

詳細は PEP 307 を参照してください。

protocol を指定しない場合、プロトコル 0 が使われます。protocol に負値か `HIGHEST_PROTOCOL` を指定すると、有効なプロトコルの内、もっとも高いバージョンのものが使われます。

バージョン2.3 以降で変更された 仕様: bin パラメータは非推奨で、後方互換性のためだけに提供されています。代わりに protocol を使うべきです。

`Pickler` コンストラクタや `dump()` および `dumps()` の引数 bin の値を真に設定することで、少しだけ効率の高いバイナリ 形式を選ぶこともできます。 protocol version >= 1 であるとき、バイナリ形式を使用するからです。