Remove dependency between python dictionaries
本问题已经有最佳答案,请猛点这里访问。
我有一个关于python字典行为的问题,我还没有看到。(我用的是python3.6)
我有一个字典,第一个字典包含两个键"kk"和"a a",都链接到一个列表。然后我做了一个新的dict namly second_dict。现在奇怪的是,每当我做了一个像分数这样的变量并编辑这个值时,它会自动更新我的字典。所以我假设python自动在字典派生变量之间建立连接。
1 2 3 4 5 6 7 8 9 10 11 12 | def main(): first_dict = {"kk": [0.0, 1.0],"aa": [0.5, 1.0]} second_dict = first_dict fractions = second_dict["kk"] fractions.pop(0) #del fractions[0] gives same result print(first_dict) #{'kk': [1.0], 'aa': [0.5, 1.0]} print(second_dict) #{'kk': [1.0], 'aa': [0.5, 1.0]} if __name__ =="__main__": main() |
我的问题是,我可以删除这些连接吗?我找到了一个解决方案,可以使用以下方法删除分数和第二个_dict之间的连接:
1 | fractions = list(second_dict["kk"]) |
号
但是,我找不到一个解决方案来删除第一个口述和第二个口述之间的连接。所以我想改变第二个口述,保持第一个口述不变。
你真正想说的是你希望
这可以通过更换埃多克斯1〔2〕
用
1 2 | from copy import deepcopy second_dict = deep_copy(first_dict) |
它与专门的字典无关。
首先,你从未做过一本新字典(浅薄的副本)。要做到这一点:
1 | new_dictionary = dict(old_dictionary) |
号
其次,列表是可变的。当您进行浅复制时,您对键值有相同的引用,因此在引用对象的任何地方都会改变对象清单。也许你想去1号[3号]:
1 2 | from copy import deepcopy new_dictionary = deepcopy(old_dictionary) |
更好的方法是尽可能使用不可变的对象(在python中,等效于