遇到一个小问题,在for循环中,将字典内容追加到列表中时发现被覆盖,在这里记录一下~
list1=[]
use_dict=dict()
for i in range(3):
use_dict['num']=i
list1.append(use_dict)
print(list1)
在这里输出的是:
[{'num': 2}, {'num': 2}, {'num': 2}]
将代码修改之后:
for j in range(3):
use_dict2=dict()
use_dict2['num']=j
list2.append(use_dict2)
print(list2)
输出的是:
[{'num': 0}, {'num': 1}, {'num': 2}]
造成这种结果的原因是:字典被append给列表的是一个地址,当字典声明在循环外的时候,字典始终是第一次声明的那一个,就算一直在追加值,也只不过是将新的值覆盖掉原来的值而已;当字典声明在循环内时,每次循环都会生成一个新的字典,每次的值也就相应的保存在了新的字典内.
打印其id可以很明确的看出来:
list1=[]
use_dict=dict()
for i in range(3):
print(id(use_dict))
use_dict['num']=i
list1.append(use_dict)
print(list1)
list2=[]
for j in range(3):
use_dict2=dict()
print(id(use_dict2))
use_dict2['num']=j
list2.append(use_dict2)
print(list2)
输出的结果为:
459391538888
459391538888
459391538888
[{'num': 2}, {'num': 2}, {'num': 2}]
459391539016
459391538952
459391539080
[{'num': 0}, {'num': 1}, {'num': 2}]
网友评论