前言
最近发现一个问题,在一次爬虫实战中,需要将字典加入列表中,意外的情况出现了!!!下面简单分析一下出现的状况:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
list = []
dic = {}
for i in range ( 5 ):
dic[ 'num' ] = i
list .append(dic)
print ( id (dic))
print ( list )
136652096
136652096
136652096
136652096
136652096
[{ 'num' : 4 }, { 'num' : 4 }, { 'num' : 4 }, { 'num' : 4 }, { 'num' : 4 }]
|
结果出乎意料,并不是我们简单认为的
1
|
[{ 'num' : 0 }, { 'num' : 1 }, { 'num' : 2 }, { 'num' : 3 }, { 'num' : 4 }]
|
用我自己的理解是:
如上图,每一个dic都给list一个位置,但你的dic在循环外,也就说每次循环你给的都是一个地址,dic的值改变,新一次的循环值就会覆盖上一次循环的值,list取到的值也改变。
正确做法:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
list = []
for i in range ( 5 ):
dic = {}
dic[ 'num' ] = i
list .append(dic)
print ( id (dic))
print ( list )
138383888
136652192
138383408
138384272
138383792
[{ 'num' : 0 }, { 'num' : 1 }, { 'num' : 2 }, { 'num' : 3 }, { 'num' : 4 }]
|
正确做法是将dic放入循环内,这样每次循环都会是一个新的dic,分配不同的地址。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。
原文链接:http://www.cnblogs.com/iqunqunqun/p/9249888.html