向list里重复append    dict时,发现最终的结果为最后的一个dict值。网上搜了下,原因如下

 

使用列表、字典之间的相互嵌套可以很容易的实现json数据格式,但是昨天在往列表中装入字典时遇到了问题:

直接使用append方法将字典添加到列表中,如果需要更改字典中的数据,那么列表中的内容也会发生改变,这是因为dict在Python里是object,不属于primitive type(即int、float、string、None、bool)。这意味着你一般操控的是一个指向object(对象)的指针,而非object本身。下面是改善方法:使用copy()

 

解决办法二:

将dict声明,放在方法体内

def new_card():
    card_dict = {} # 修改了这里,将dict声明放在fun内
    card_dict["name"] = name
    card_dict["age"] = age
    card_dict["phone"] = phone
    card_dict["email"] = email

    card_list.append(card_dict)

 

原因: python变量内存分配问题。python中的对象之间赋值时是按引用传递的。字典被append给列表的是一个地址,当字典声明在循环外的时候,字典始终是第一次声明的那一个,就算一直在追加值,也只不过是将新的值覆盖掉原来的值而已;当字典声明在循环内时,每次循环都会生成一个新的字典,每次的值也就相应的保存在了新的字典内.

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐