删除python词典之间的依赖关系[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了删除python词典之间的依赖关系[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我有一些关于我尚未见过的python字典行为的问题。 (我使用的是python3.6)

我有一个包含两个键“kk”和“aa”的字典first_dict,它们都链接到一个列表。然后我做了一个新的dict namly second_dict。现在来了一件奇怪的事情,每当我像分数一样制作变量并编辑这个值时,它会自动更新我的字典。所以我假设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不变。

答案

它与字典无关。

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

new_dictionary = dict(old_dictionary)

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

from copy import deepcopy
new_dictionary = deepcopy(old_dictionary)

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

另一答案

你真正想说的是你想要first_dictsecond_dict指向不同的对象,而不是相同的对象

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

from copy import deepcopy
second_dict = deep_copy(first_dict)

以上是关于删除python词典之间的依赖关系[重复]的主要内容,如果未能解决你的问题,请参考以下文章

模块之间的Python依赖关系[重复]

从python中的2d列表中删除重复的词典

使用循环片段依赖关系模块化单活动Android应用程序

在tablayout片段之间进行通信[重复]

如何使用密码删除两个节点之间的重复关系?

如何检查 Jar 文件之间的依赖关系?