python append 覆盖数据

当使用Python的append方法向列表添加对象时,可能会遇到后面的元素覆盖前面元素的情况。这是因为列表添加的是对象的引用,而非副本。例如,一个字典被多次append到列表中,如果字典内容改变,列表内所有元素都会同步更新。解决这个问题的方法是使用深拷贝(deepcopy)函数,确保每次添加的是字典的独立副本,而不是同一引用。示例代码展示了如何避免这种问题。

更多文章详见:python append 覆盖数据 – 自我的进化icon-default.png?t=M5H6https://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}}]
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值