关于Python中,循环后使用list.append(),数据被覆盖的问题

Posted iqunqunqun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Python中,循环后使用list.append(),数据被覆盖的问题相关的知识,希望对你有一定的参考价值。

在一次爬虫实战中,需要将字典加入列表中,意外的情况出现了!!!下面简单分析一下出现的状况:

 1 list = []
 2 dic = {}
 3 for i in range(5):
 4     dic[num] = i
 5     list.append(dic)
 6     print(id(dic))
 7 print(list)
 8 136652096
 9 136652096
10 136652096
11 136652096
12 136652096
13 [{num: 4}, {num: 4}, {num: 4}, {num: 4}, {num: 4}]

 

结果出乎意料,并不是我们简单认为的

[{‘num‘: 0}, {‘num‘: 1}, {‘num‘: 2}, {‘num‘: 3}, {‘num‘: 4}]

用我自己的理解是:

  如上图,每一个dic都给list一个位置,但你的dic在循环外,也就说每次循环你给的都是一个地址,dic的值改变,新一次的循环值就会覆盖上一次循环的值,list取到的值也改变。

正确做法:

 1 list = []
 2 for i in range(5):
 3     dic = {}
 4     dic[num] = i
 5     list.append(dic)
 6     print(id(dic))
 7 print(list)
 8 138383888
 9 136652192
10 138383408
11 138384272
12 138383792
13 [{num: 0}, {num: 1}, {num: 2}, {num: 3}, {num: 4}]

正确做法是将dic放入循环内,这样每次循环都会是一个新的dic,分配不同的地址。

 

以上是关于关于Python中,循环后使用list.append(),数据被覆盖的问题的主要内容,如果未能解决你的问题,请参考以下文章

python遍历特定目录的深度问题

pythonfor循环结束后关机

python语法问题:关于在list中使用for循环

python列表的常用操作方法

关于python的for循环

关于python3.6.3 与python2.7.14使用for循环便利时遇到in range(变量)时错误