为什么下面的代码输出{'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。我错过了一些重要的东西吗?
答案 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的所有内容也会受到影响。