python3 append 词典元素出错 ?
大家讲道理
大家讲道理 2017-04-18 10:17:41
[Python讨论组]

定义了一个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()
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(1)
阿神

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号