python3 append 词典元素出错 ?

新手上路,请多包涵

定义了一个copy函数,将nums列表中的词典元素,复制到a列表中。
打印出的结果却是
[{'val': '1', 'name': '1'}]
[{'val': '2', 'name': '2'}, {'val': '2', 'name': '2'}]
[{'val': '3', 'name': '3'}, {'val': '3', 'name': '3'}, {'val': '3', 'name': '3'}]
a.append(tempdict)将最后一次添加的元素重复添加多次。代码如下

def copy():

a = []
tempdict = dict.fromkeys(('val','name'),'')
nums = [{'val':'1','name':'1'},{'val':'2','name':'2'},{'val':'3','name':'3'}]

for eachnum in nums:
    tempdict['val'] = eachnum['val']
    tempdict['name'] = eachnum['name']
    a.append(tempdict)
    print(a)
    

if name == '__main__':

getsum()
阅读 2.5k
1 个回答

题主,你的tempdict始终是同一个字典对象,你每次对它进行赋值,实际上都是在修改同一个字典,所以最后虽然append到列表里成了三个列表元素,但三个字典中的key,value都指向的是内存空间中的同一个key值和value值,这也就是为什么循环每进行一次,值就变一次。不知道我有没有解释清楚.. 你可以在循环前和循环中都打印一下tempdict的id看一下。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题