关于字典:删除python词典之间的依赖关系

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"])

但是,我找不到一个解决方案来删除第一个口述和第二个口述之间的连接。所以我想改变第二个口述,保持第一个口述不变。


你真正想说的是你希望first_dictsecond_dict指向不同的对象,而不是同一个对象。

这可以通过更换埃多克斯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中,等效于list的对象通常是tuple)。