###
3.14.5.1 通常のクラスインスタンスの pickle 化および unpickle 化

pickle 化されたクラスインスタンスが unpickle 化されたとき、 `__init__()` メソッドは通常呼び出されません 。 unpickle 化の際に `__init__()` が呼び出される方が望ましい場合、 クラスにおいてメソッド `__getinitargs__()` を定義することが できます。このメソッドはクラスコンストラクタ (すなわち `__init__()`) に渡されるべき タプルを 返さなければなりません。 `__getinitargs__()` メソッドは pickle 時に呼び出されます; この関数が返すタプルはインスタンスの pickle 化データに組み込まれます。

クラスは、インスタンスの pickle 化方法にさらに影響を与えることが できます; クラスが `__getstate__()` メソッドを定義している 場合、このメソッドが呼び出され、返された状態値はインスタンスの内容 として、インスタンスの辞書の代わりに pickle 化されます。 `__getstate__()` メソッドが定義されていない場合、 インスタンスの `__dict__` の内容が pickle 化されます。

unpickle 化では、クラスが `__setstate__()` も定義していた 場合、unpickle 化された状態値とともに呼び出されます 3.6。`__setstate__()` メソッドが定義 されていない場合、pickle 化された状態は辞書型でなければならず、 その要素は新たなインスタンスの辞書に代入されます。クラスが `__getstate__()` と `__setstate__()` の両方を定義して いる場合、状態値オブジェクトは辞書である必要はなく、これらのメソッド は期待通りの動作を行います。 3.7

警告: 新しいスタイルのクラスにおいて `__getstate__()` が負値を返す場合、`__setstate__()` メソッドは呼ばれません。

... 化された状態値とともに呼び出されます 3.6
  これらのメソッドはクラスインスタンスのコピーを 実装する際にもｔ用いられます
... は期待通りの動作を行います。3.7
  このプロトコルはまた、 `copy` で定義されている浅いコピーや深いコピー操作でも用いら れます。