なぜ
pickle.dumps({}.items())
Python 3.5.2ではTypeError: can't pickle dict_items objects
で失敗しますが、Python 2.7.12では失敗しますか?
辞書を「酸洗い」する
pickle.dumps({})
両方のPythonバージョンで動作します(およびPython 2.7.12は上記のコマンドと同じ出力を提供します))。
なぜなら、python 2.7 .items()
は、list
の単なるtuples
を返すためです。これは、is選択可能です。
python 3.xでは、dict_items
オブジェクト(python 2には存在しません)を返しますが、選択できません(ただし、リストを生成しないため高速です) 、これはpython 2.x iteritems()
)とほぼ同等です。
ただし、リスト変換を強制してpython2.xの動作をシミュレートすることはできます。
pickle.dumps(list(d.items()))