```python
l = [['a','b','c','d'],[1,2,3,4],[2,3,4,5],[3,4,5,6]]
dic = dict.fromkeys(l[0],[])
dic['a'].append(l[1][0])
print(dic)
这段代码中,我希望能够得到
```python
{'a':[1], 'b': [], 'c': [], 'd': []}
而我的结果却得到
{'a':[1], 'b': [1], 'c': [1], 'd': [1]}
有人能解释一下为什么,并且我应该如何修改我的代码?
感谢大家
因为你的dict.fromkeys(l[0],[])中的[]是先在内存中创建一个空列表对象,然后dict.fromkeys()会将l[0]中的四个元素作为四个键,然后键---值对中的值都绑定到这个空列表对象上,当你用dict['a']访问到[]的时候,只要是对空[]的改变,其它键对应的值就跟着变。
可以改键的值,但不能直接修改列表,如:
dic['a'] = [l[1][0]]
看图
l = [['a' ,'b' ,'c' ,'d'] ,[1 ,2 ,3 ,4] ,[2 ,3 ,4 ,5] ,[3 ,4 ,5 ,6]]
dic = dict.fromkeys(l[0],[])
dic['a'] = l[1][0]
print(dic)
# 修改第六行为下面的代码,至于所有键同时赋值, dic['a'].append 等同于 [].append 你可以把其他键值改为非空列表试试
dic['a'] = [l[1][0]]