问题描述

l = []
d = {'id':0}
for i in range(3):
	d['id'] = i
	l.append(d)
print(l)

上述代码,我们的预期输出是:

[{'id':0},{'id':1},{'id':2}]

但是实际的输出是:

[{'id':2},{'id':2},{'id':2}]
#id
[28668464,28668464,28668464]

产生此问题的原因是d在循环外,地址固定,而list内存储的是d的地址,所以每次循环d的值会发生改变,而list内的数据都被覆盖了

解决方法

将d的创建包含在循环内,每次地址都进行更新。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐