列表转换为字典所碰到的问题



```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]]
看图

img


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]]