mob = [
{"last_name": "Petrov", "first_name": "Oleg", "phone": "46546546465", "age": "4"},
{"last_name": "Ivanov", "first_name": "Petr", "phone": "34534534534", "age": "5"},
{"last_name": "Metrov", "first_name": "Mikl", "phone": "56456456466", "age": "6"},
{"last_name": "HHHHHH", "first_name": "Manr", "phone": "77777777777", "age": "7"},
{"last_name": "PPPPPP", "first_name": "Give", "phone": "64563426888", "age": "8"},
{"last_name": "TTTTTT", "first_name": "Lisa", "phone": "66666666666", "age": "9"}
]
peple = {}
peples = []
for i in mob:
peple["last_name"] = i['last_name']
peple["phones"] = ['phones']
peple["age"] = i['age']
peples.append(peple)
print(peples)
为什么整个列表都peples[]
填满了列表中的最后一个值mob[]
?
变量
peple
是对内存中对象的引用。那些。列表内部peples
存储了对同一对象的引用。因此,在每次迭代时调用通过改变字典的值
peple
,我们也在改变已经添加到数组中的值peples
。为了解决这个问题,你可以在循环中声明一个字典:id
您可以使用返回对象标识符的函数检查数组是否存储了对同一对象的引用。对于您提供的代码:结论:
peple
如果我们在循环中定义字典:结论:
可以看出,第一种情况下所有对象的标识符都是相同的,第二种情况则不同。
这是一篇关于类型可变性的好文章https://medium.com/@Cu7ious/python-mutable-vs-immutable-ae9a188effe3。