python 覆盖list_python list append 被覆盖问题

遇到一个小问题,在for循环中,将字典内容追加到列表中时发现被覆盖,在这里记录一下~

list1=[]

use_dict=dict()

for i in range(3):

use_dict['num']=i

list1.append(use_dict)

print(list1)

在这里输出的是:

[{'num': 2}, {'num': 2}, {'num': 2}]

将代码修改之后:

for j in range(3):

use_dict2=dict()

use_dict2['num']=j

list2.append(use_dict2)

print(list2)

输出的是:

[{'num': 0}, {'num': 1}, {'num': 2}]

造成这种结果的原因是:字典被append给列表的是一个地址,当字典声明在循环外的时候,字典始终是第一次声明的那一个,就算一直在追加值,也只不过是将新的值覆盖掉原来的值而已;当字典声明在循环内时,每次循环都会生成一个新的字典,每次的值也就相应的保存在了新的字典内.

打印其id可以很明确的看出来:

list1=[]

use_dict=dict()

for i in range(3):

print(id(use_dict))

use_dict['num']=i

list1.append(use_dict)

print(list1)

list2=[]

for j in range(3):

use_dict2=dict()

print(id(use_dict2))

use_dict2['num']=j

list2.append(use_dict2)

print(list2)

输出的结果为:

459391538888

459391538888

459391538888

[{'num': 2}, {'num': 2}, {'num': 2}]

459391539016

459391538952

459391539080

[{'num': 0}, {'num': 1}, {'num': 2}]

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值