对于我用python pygame制作的游戏,我有一个教程类,其中包含阶段列表,每个阶段包含一个字典,每个阶段包含一个标题和需要按下的键。为了确保玩家按下每个键,我制作了一份清单副本,认为这也将复制内容。但是,每当我减少字典中按下的键时,它就会第一次起作用,因为需要在每个阶段从字典中删除需要按下的键的ID。但是,我很快意识到,当我重新开始本教程时,硬编码列表的副本不是真正的副本,因为复制列表中的字典在复制列表和未复制列表中都被更改了。
问题出在这里
list_test = [{'dictionary': 1, 'asdf': 2}, {'dictionary':2, 'asdf':3}]
list_copy = list_test[:]
#this happens to only ensure that appended or popped items don't change the initial list.
# What happens when i edit a dictionary
list_copy[0]['dictionary'] = 123
assert not list_copy[0]['dictionary'] == list_test[0]['dictionary']
最后一个测试为假,因为以某种方式编辑复制列表中的较低级别会同时编辑两个列表。
欢迎所有建议!
答案 0 :(得分:2)
只要列表仅包含字典,该字典就应该有效
list_copy = [dict(i) for i in list_test]
或
list_copy = [i.copy() for i in list_test]
这样,您将创建词典副本的列表,而不是对原始词典的引用。