# 15 `cPickle` -- より高速な `pickle`

`cPickle` モジュールは Python オブジェクトの直列化および 非直列化をサポートし、`pickle` モジュールとほとんど同じインタフェースと機能を提供します。 いくつか相違点がありますが、最も重要な違いはパフォーマンスと サブクラス化が可能かどうかです。

第一に、`cPickle` は C で実装されているため、`pickle` よりも最大で 1000 倍高速です。第二に、`cPickle` モジュール 内では、呼び出し可能オブジェクト `Pickler()` および `Unpickler()` は関数で、クラスではありません。 つまり、pickle 化や unpickle 化を行うカスタムのサブクラスを 導出することができないということです。 多くのアプリケーションではこの機能は不要なので、`cPickle` モジュールによる大きなパフォーマンス向上の恩恵を受けられるはず です。`pickle` と `cPickle` で作られた pickle データ列は同じなので、既存の pickle データに対して `pickle` と `cPickle` を互換に使用することができます 23。

`cPickle` と `pickle` の API 間には他にも些細な相違が ありますが、ほとんどのアプリケーションで互換性があります。 より詳細なドキュメンテーションは `pickle` のドキュメント にあり、そこでドキュメント化されている相違点について挙げています。

#### Footnotes

... を互換に使用することができます 23
  pickle データ形式は実際には小規模なスタック指向のプログラム 言語であり、またあるオブジェクトをエンコードする際に多少の自由度が あるため、二つのモジュールが同じ入力オブジェクトに対して異なる データ列を生成することもあります。しかし、常に互いに他のデータ列 を読み出せることが保証されています。