web-dev-qa-db-ja.com

TypeError:dict_itemsオブジェクトをピクルできません

なぜ

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は上記のコマンドと同じ出力を提供します))。

3
fuenfundachtzig

なぜなら、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()))