网络编程
位置:首页>> 网络编程>> Python编程>> Python中循环后使用list.append()数据被覆盖问题的解决

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

作者:iqunqunqun  发布时间:2023-02-08 20:45:49 

标签:python,循环,list.append()

前言

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


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}]

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


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

用我自己的理解是:

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

正确做法:


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

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com