python pickleのファイルモード (バイナリモードの必然性)


python のpickleでファイルを保存する場合、バイナリモードで保存することは必須なのでしょうか? 例えば、

[code]

    import pickle
    import numpy as np
    x = np.random.random(100,100,100)
    
    # binary mode
    pickle.dump(x, open('hoge.pkl', 'wb'))
    # not binary mode
    pickle.dump(x, open('fuga.pkl', 'w'))
    
[/code]

とすると、、'wb' オプションでも、'w'オプションでも、全く同じ出力ファイルが得られるようです。(diffをとると全く差がない)

質問: この 'b' (binary option) を付けないとまずいような状況は何かあるのでしょうか?  
'b'をつけるか付けないかで、保存されるものは変わりうるのでしょうか?

ちなみに、私は Linux (Ubuntu) を使っています。




Python3 では`bytes`という型が出来て、`str`と区別されるようになりました。  
テキストモードで開かれたファイルオブジェクトの`write`は`str`を要求するので、質問のコードは失敗します。

[code]

    >>> pickle.dump(x, open('fuga.pkl', 'w'))
    Traceback (most recent call last):
      File "<ipython-input-27-c8e3989f5c8e>", line 1, in <module>
        pickle.dump(x, open('fuga.pkl', 'w'))
    TypeError: must be str, not bytes
    
[/code]

Python2
ではエラーにはなりませんが、テキストモードではデータに改行文字があると、OS標準の改行コードに変更されるので、内容が変わる事がある筈です。pickleが作るデータに改行文字が含まれていて、それの変更がデータのロード時に影響するかどうかは私は分かりません。

