3.14.1 他の Python モジュールとの関係

pickle モジュールには cPickle と呼ばれる 最適化のなされた親類モジュールがあります。名前が示すように、 cPickle は C で書かれており、このため pickle より 1000 倍くらいまで高速になる可能性があります。しかしながら cPickle では Pickler() および Unpickler() クラスのサブクラス化をサポートしていません。 これは cPickle では、これらは関数であってクラスでは ないからです。ほとんどのアプリケーションではこの機能は 不要であり、cPickle の持つ高いパフォーマンスの 恩恵を受けることができます。その他の点では、二つのモジュールに おけるインタフェースはほとんど同じです; このマニュアルでは 共通のインタフェースを記述しており、必要に応じてモジュール間 の相違について指摘します。以下の議論では、picklecPickle の総称として ``pickle'' という用語を使う ことにします。

これら二つのモジュールが生成するデータストリームは相互交換 できることが保証されています。

Python には marshal と呼ばれるより原始的な直列化モジュール がありますが、一般的に Python オブジェクトを直列化する方法としては pickle を選ぶべきです。marshal は基本的に .pyc ファイルをサポートするために存在しています。

pickle モジュールはいくつかの点で marshal と明確に異なります:

pickle モジュールは誤りを含む、あるいは悪意を持って 構築されたデータに対して安全にはされていません。信用できない、 あるいは認証されていないデータ源から受信したデータを逆 pickle 化 しないでください。

直列化は永続化 (persisitence) よりも原始的な概念です; pickle はファイルオブジェクトを読み書きしますが、永続化 されたオブジェクトの名前付け問題や、(より複雑な) オブジェクトに 対する競合アクセスの問題を扱いません。pickle モジュール は複雑なオブジェクトをバイトストリームに変換することができ、 バイトストリームを変換前と同じ内部構造をオブジェクトに変換する ことができます。このバイトストリームの最も明白な用途は ファイルへの書き込みですが、その他にもネットワークを介して送信 したり、データベースに記録したりすることができます。 モジュール shelve はオブジェクトを DBM 形式の データベースファイル上で pickle 化したり unpickle 化したりする ための単純なインタフェースを提供しています。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。