为什么复制不适用于Python中的字典?

时间:2019-07-04 01:16:49

标签: python

copy.copy(tracker.items())

在此代码中,tracker.items()是一个字典,此行中的代码报告此错误消息:

File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/copy.py", line 96, in copy
    rv = reductor(4)
TypeError: can't pickle dict_items objects

为什么会发生这种情况以及如何解决?

1 个答案:

答案 0 :(得分:6)

tracker.items()不是字典,而是tracker中键/值对的字典视图。 tracker是字典。 copy.copy(tracker)可以正常工作,如果您只想存储键/值对的视图,则可以随时在结果上调用.items()

看到的错误是因为,当类型没有定义复制方法(字典视图没有定义),而是复制可复制的内容(copy.copy时,dict会退回到酸洗和酸洗。 )实际上非常有效(根本不需要酸洗),因此您根本不需要尝试复制视图本身:

copy.copy(tracker).items()

或者由于dict具有.copy()方法,因此您可以避免模块导入而只需执行以下操作:

tracker.copy().items()