【发布时间】:2018-08-14 01:33:14
【问题描述】:
我有一个关于我还没有看到的 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 之间的连接,方法是:
fractions = list(second_dict["kk"])
但是我找不到删除 first_dict 和 second_dict 之间连接的解决方案。 所以我想改变 second_dict 并保持 first_dict 不变。
【问题讨论】:
-
您没有制作新词典。你只是再次引用它。
-
此行为的关键字是“可变的”,参见例如stackoverflow.com/questions/24292174/are-python-lists-mutable 。您的
second_dict确实不是第二个字典,而是同一个字典的第二个名称。 -
@syntonym 我认为这里有两层误解,我在回答中详细说明了。
-
“重复”帖子中的第一个解决方案不能解决我的问题。所以 dict2 = dict(dict1) 和 dict2 = dict1.copy() 不起作用。怎么会?
-
@candah:因为
dict(dictionary)和dictionary.copy()创建了一个shallow副本,所以values中包含的list对象仍然是共享的。
标签: python dictionary dependencies connection