码迷,mamicode.com
首页 > 编程语言 > 详细

python中字典的陷阱

时间:2017-07-18 00:05:34      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:一个   pre   style   log   while   元素   循环   情况   陷阱   

把字典与列表组合,如

i=20
s=[]#定义一个空列表
b={d:i}#定义一个字典
while i>0:
     i=i-1
     b[d]=i#更新字典的值
     s.append(b)
print(s)

结果为

[{d: 0}, {d: 0}, {d: 0}, {d: 0}, {d: 0}, {d: 0}, {d: 0}, {d: 0}, {d: 0}, {d: 0}, {d: 0}, {d: 0}, {d: 0}, {d: 0}, {d: 0}, {d: 0}, {d: 0}, {d: 0}, {d: 0}, {d: 0}]
>>> s[0][d]=90
>>> s
[{d: 90}, {d: 90}, {d: 90}, {d: 90}, {d: 90}, {d: 90}, {d: 90}, {d: 90}, {d: 90}, {d: 90}, {d: 90}, {d: 90}, {d: 90}, {d: 90}, {d: 90}, {d: 90}, {d: 90}, {d: 90}, {d: 90}, {d: 90}]

只改变第一个元素,也是这样,

s的每个元素都是同一个字典实例,改变列表任何一个元素中字典的值,就全部改变了

若改为:

i=20
s=[]
while i>0:
     i=i-1
     b={d:i}#每次重新定义b,并赋值
     s.append(b)
print(s)

结果为

[{d: 19}, {d: 18}, {d: 17}, {d: 16}, {d: 15}, {d: 14}, {d: 13}, {d: 12}, {d: 11}, {d: 10}, {d: 9}, {d: 8}, {d: 7}, {d: 6}, {d: 5}, {d: 4}, {d: 3}, {d: 2}, {d: 1}, {d: 0}]

则是我们想要的结果

第一种情况:是每个列表元素,其实是一个实例, 其实循环里只是 在更新字典的值

第二种情况:每次重新定义字典

 

python中字典的陷阱

标签:一个   pre   style   log   while   元素   循环   情况   陷阱   

原文地址:http://www.cnblogs.com/wanglei0103/p/7197754.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!