|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
如下列代码,我设置一个字典为 dic = {1: [], 2: [], 3: [], 4: [], 5: []},给dic[1]进行append操作,却发现系统对所有dic下的键对应的list进行了append操作,用setdefault还是一样对所有键对应的list进行了操作,这种情况该怎么解决呢【运行环境为Python3.6.3】
>>> a = [1,2,3,4,5]
>>> dic = {}.fromkeys(a,[])
>>> dic
{1: [], 2: [], 3: [], 4: [], 5: []}
>>> dic[1].append("m")
>>> dic
{1: ['m'], 2: ['m'], 3: ['m'], 4: ['m'], 5: ['m']}
>>> dic[1]
['m']
>>> dic[2]
['m']
>>> lis = dic[1]
>>> lis.append("n")
>>> dic
{1: ['m', 'n'], 2: ['m', 'n'], 3: ['m', 'n'], 4: ['m', 'n'], 5: ['m', 'n']}
>>> dic.setdefault(1,[]).append("k")
>>> dic
{1: ['m', 'n', 'k'], 2: ['m', 'n', 'k'], 3: ['m', 'n', 'k'], 4: ['m', 'n', 'k'], 5: ['m', 'n', 'k']}
>>>
跟版本无关
因为fromkeys的操作中你用一个空列表作为每一个键的值
此时系统为了节约开销,不会自动给你生成那么多的列表,而是用一个同一个列表
所以你用列表的操作函数会影响所有的键对应的值
解决方案可以不用fromkeys,比如
- >>> dic2={1:[],2:[],3:[]}
- >>> dic2[1].append('m')
- >>> dic2
- {1: ['m'], 2: [], 3: []}
复制代码
|
|