pickle.dumps の引数 protocol に -1 渡すとどうなる?

2021/01/18に公開

pickle.dumps の引数 protocol に -1 渡すとどうなる?

某所の python なコードを眺めてたときに pickle.dumps の引数 protocol に -1 を渡してるのを見つけて、不思議に思ったのでドキュメント見てみた。

プロトコルまわりの定数としては HIGHEST_PROTOCOL と DEFAULT_PROTOCOL のふたつだけで、コンソールで試してみたところどちらも正の整数だった。

# python 3.8.1 で検証
>>> import pickle
>>> pickle.DEFAULT_PROTOCOL
4
>>> pickle.HIGHEST_PROTOCOL
5

さらにドキュメント読み進めると dump, dumps に渡される引数は Pickler クラスのコンストラクタと同じ意味とのことだったので、そちらを見てみるとバッチリ正解が書いてあった。

任意の引数 protocol は、整数で、pickle 化で使用するプロトコルを指定します; サポートされているプロトコルは 0 から HIGHEST_PROTOCOL までになります。指定されない場合、DEFAULT_PROTOCOL が使用されます。負数が与えられた場合、HIGHEST_PROTOCOL が使用されます。

これ見ると -1 渡すよりは HIGHEST_PROTOCOL 渡すほうが行儀は良さそうすなー。ベタ書きしてると意味が汲み取りにくいし、バージョンによって挙動変わったりもするし。

とりあえずはまたひとつ勉強になりました :-)

Discussion