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

时间:2018-03-06 08:47:56

标签: python dictionary dependencies connection

我对一些我尚未见过的python字典行为有疑问。 (我正在使用python3.6)

我有一个字典 first_dict ,其中包含两个键" kk"和" aa"都链接到列表。然后我做了一个新的命令namly second_dict 。现在出现了一个奇怪的事情,每当我创建一个像 fractions 这样的变量并编辑这个值时,它会自动更新我的字典。所以我假设python自动在字典派生变量之间建立连接。

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()

我的问题是我可以删除这些连接吗,我找到了一个解决方案,可以使用以下方法删除分数与我的 second_dict 之间的连接:

fractions = list(second_dict["kk"])

但是我找不到解决方法来删除 first_dict second_dict 之间的联系。 所以我想改变 second_dict 并保持 first_dict 不变。

2 个答案:

答案 0 :(得分:4)

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

这可以通过替换来完成 second_dict = first_dict

使用

from copy import deepcopy
second_dict = deep_copy(first_dict)

答案 1 :(得分:2)

它与字典无关。

首先,你从未制作过一本新词典(浅版)。要做到这一点:

new_dictionary = dict(old_dictionary)

其次,列表是可变的。当您进行浅层复制时,您对键值具有相同的引用,因此对象的变异将在其引用的任何位置显示。 也许你想要deepcopy

from copy import deepcopy
new_dictionary = deepcopy(old_dictionary)

更好的方法是尽可能使用不可变对象(list的等价物通常是python中的tuple