列表使用append()方法存放字典数据时,当更改字典中的数据时,列表中的数据也会发生更改。这是因为字典在Python里是object,不属于primitive type(即int、float、string、None、bool)。这意味着你一般操控的是一个指向object(对象)的指针,而非object本身。
dic = {}
list = []
dic['expectedDistance'] = '1m'
dic['actualDistance'] = [1,2,3,4]
list.append(dic)
print(list)
#Output:[{'expectedDistance':1m,'actualDistance':[1,2,3,4]}]
dic['expectedDistance'] = '2m'
dic['actualDistance'] = [5,6,7,8]
list.append(dic)
print(list)
#Output:[{'expectedDistance':'2m','actualDistance':[5,6,7,8]}]
解决方式: 使用copy()方法
dic = {}
list = []
dic['expectedDistance'] = '1m'
dic['actualDistance'] = [1,2,3,4]
list.append(dic.copy)
dic['expectedDistance'] = '2m'
dic['actualDistance'] = [5,6,7,8]
list.append(dic.copy())
print(list)
#Output:[{'expectedDistance': '1m', 'actualDistance': [1, 2, 3, 4]}, {'expectedDistance': '2m', 'actualDistance': [5, 6, 7, 8]}]