删除 python 字典之间的依赖关系
Remove dependency between python dictionaries
我有一些关于 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()
我的问题是我可以删除这些连接吗,我找到了一个解决方案来删除 fractions 和我的 second_dict[=30= 之间的连接] 通过使用:
fractions = list(second_dict["kk"])
但是我找不到解决方案来删除 first_dict 和 second_dict 之间的连接。
所以我想更改 second_dict 并保持 first_dict 不变。
您真正想说的是您希望 first_dict
和 second_dict
指向不同的对象,而不是同一个对象
这可以通过替换来完成
second_dict = first_dict
有
from copy import deepcopy
second_dict = deep_copy(first_dict)
具体与词典无关
首先,你从来没有制作过新词典(浅拷贝)。为此:
new_dictionary = dict(old_dictionary)
其次,列表是可变的。当您 shallow-copy 时,您对键值有相同的引用,因此改变对象会在引用它的任何地方出现。 也许你想要deepcopy
:
from copy import deepcopy
new_dictionary = deepcopy(old_dictionary)
更好的方法是尽可能使用不可变对象(list
的等价物通常是 python 中的 tuple
)。
我有一些关于 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()
我的问题是我可以删除这些连接吗,我找到了一个解决方案来删除 fractions 和我的 second_dict[=30= 之间的连接] 通过使用:
fractions = list(second_dict["kk"])
但是我找不到解决方案来删除 first_dict 和 second_dict 之间的连接。 所以我想更改 second_dict 并保持 first_dict 不变。
您真正想说的是您希望 first_dict
和 second_dict
指向不同的对象,而不是同一个对象
这可以通过替换来完成
second_dict = first_dict
有
from copy import deepcopy
second_dict = deep_copy(first_dict)
具体与词典无关
首先,你从来没有制作过新词典(浅拷贝)。为此:
new_dictionary = dict(old_dictionary)
其次,列表是可变的。当您 shallow-copy 时,您对键值有相同的引用,因此改变对象会在引用它的任何地方出现。 也许你想要deepcopy
:
from copy import deepcopy
new_dictionary = deepcopy(old_dictionary)
更好的方法是尽可能使用不可变对象(list
的等价物通常是 python 中的 tuple
)。