python之向列表循環添加字典

錯誤示例:

 

nid = "1,2"
print(nid.split(','))
mydict = {}
datas = []
for i in nid.split(','):
    mydict["id"] = str(i)
    mydict["checked"] = True
    datas.append(mydict)
print(str(datas))
運行結果:

['1', '2']
[{'id': '2', 'checked': True}, {'id': '2', 'checked': True}]

正確示例:

nid = "1,2"
print(nid.split(','))
datas = []
for i in nid.split(','):
    mydict = {}
    mydict["id"] = str(i)
    mydict["checked"] = True
    datas.append(mydict)
print(str(datas))
運行結果:

['1', '2']
[{'id': '1', 'checked': True}, {'id': '2', 'checked': True}]

原因解釋:

因爲每次添加的都是同一個內存到list中去了,mydict每次寫入的時候改變了內存中的value,但是地址不變,即是,創建了一次內存空間,只會不斷的改變value了,添加到list中的時候value已經改了。所以需要在for循環裏面去每次循環都創建一個空的dict,以保證之前添加過的不會被改變。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章