美文网首页
python list append 被覆盖问题

python list append 被覆盖问题

作者: dear就是喵啊 | 来源:发表于2018-08-22 16:52 被阅读0次

遇到一个小问题,在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}]

相关文章

  • python list append 被覆盖问题

    遇到一个小问题,在for循环中,将字典内容追加到列表中时发现被覆盖,在这里记录一下~ 在这里输出的是: 将代码修改...

  • Python-2-list

    切片请看 Python str list 方法描述·例子备注append向末尾添加值list.append('')...

  • python list append()

    描述 append() 往已经存在的列表中添加元素。 语法 list.append(obj) 参数 obj - 这...

  • python 基础

    python 基础 tuple list append insert pop set add remove dic...

  • Python List append()方法

    append() 方法用于在列表末尾添加新的元素。 这个方法会修改原来的列表。 append()的语法语法: li...

  • Python学习之list

    测试代码 运行结果 总结 python中list的方法:index,count,append,insert,ext...

  • python append()函数

    python append()函数 最近做一个项目,需要在列表(list)中添加字符串信息,现说一下append方...

  • Python数据类型

    下面列举Python中四种数据类型的一些特征 列表 有序list.append(data)list[i]或list...

  • [Python]list.append()在for循环中每次添加

    [Python]list.append()在for循环中每次添加的都是最后的一个元素 被添加的对象声明,要放在fo...

  • 2018-11-30

    在list的首部执行append方法 一般情况下,我们使用append向List添加新的元素时,新的元素总是被添加...

网友评论

      本文标题:python list append 被覆盖问题

      本文链接:https://www.haomeiwen.com/subject/wiyyiftx.html