更改词典中的列表

时间:2016-05-30 16:10:37

标签: python dictionary

为什么下面的代码输出{'a': [1, 3, 4, 5, 6, 7, 8, 9], 'b': [1, 3, 4, 5, 6, 7, 8, 9]}

adic = {}  
main_array = [1,2,3,4,5,6,7,8,9]  
adic["a"] = main_array  
adic["b"] = main_array  
array = adic["a"]  
array.remove(2)  
print(adic)

我甚至没有将新数组分配给密钥。为什么要从字典中的所有数组中自动删除2。我错过了一些重要的东西吗?

2 个答案:

答案 0 :(得分:1)

您的所有参考都指向同一个列表,您可以通过添加以下内容进行检查:

print(id(adic["a"]))
print(id(adic["b"]))
print(id(array))
print(id(main_array))

在我的系统上:

32707888
32707888
32707888
32707888

作业不会创建副本。

如果这是你想要的,有几种方法可以复制列表,例如

new_list = list(old_list)

讨论了here

答案 1 :(得分:0)

你的输出之所以这样做是因为你设置每个adic['value'] = main_array这些语句的行是指向main_array的相同内存地址所以当你array = adic["a"]表示&# 39; s也指向相同的内存地址,当你删除2时,它从main_array中删除2。因为要从main_array中删除,所以指向main_array的所有内容也会受到影响。