更多文章详见:python append 覆盖数据 – 自我的进化
https://www.shanxing.top/?p=205
问题:使用append为list添加object的时候,有时候会出现后面的object将前面的几个给覆盖的情况
原因:当在list中append一个对象的时候,并没有创建新的内存地址,而是将该对象的地址引用了过来,这就导致当该对象变化的时候,前面append进来的对象也会跟着变化。
例子代码:
list = []
item = {}
for i in range(3,3):
item[1] = i
list.append({'item':item})
print(list)
结果:[{'item': {1: 2}}, {'item': {1: 2}}, {'item': {1: 2}}]
解决方式:使用深度拷贝 deepcopy ,复制出一个新的对象并使用。
例子代码:
import copy
list = []
item = {}
for i in range(0,3):
item[1] = i
list.append(copy.deepcopy({'item':item}))
print(list)
结果:[{'item': {1: 0}}, {'item': {1: 1}}, {'item': {1: 2}}]
当使用Python的append方法向列表添加对象时,可能会遇到后面的元素覆盖前面元素的情况。这是因为列表添加的是对象的引用,而非副本。例如,一个字典被多次append到列表中,如果字典内容改变,列表内所有元素都会同步更新。解决这个问题的方法是使用深拷贝(deepcopy)函数,确保每次添加的是字典的独立副本,而不是同一引用。示例代码展示了如何避免这种问题。

4695

被折叠的 条评论
为什么被折叠?



