python中list使用append()添加dict,值被覆盖问题

使用append()方法将dict内容追加到list时,发现值被覆盖

card_dict = {}
card_list = []

def new_card():

    print("-" * 50)
    print("功能:新建名片")

    name = input("请输入姓名:")
    age = input("请输入年龄:")
    phone = input("请输入电话:")
    email = input("请输入邮箱:")

    card_dict["name"] = name
    card_dict["age"] = age
    card_dict["phone"] = phone
    card_dict["email"] = email

    card_list.append(card_dict)

    print('=' * 50)
    print("成功添加 %s 的名片" % card_dict["name"])
    print(card_list)
    print('=' * 50)

输出:list长度为2,添加的值被覆盖
在这里插入图片描述
在这里插入图片描述
修改后:
在这里插入图片描述
在这里插入图片描述
区别:将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给列表的是一个地址,当字典声明在循环外的时候,字典始终是第一次声明的那一个,就算一直在追加值,也只不过是将新的值覆盖掉原来的值而已;当字典声明在循环内时,每次循环都会生成一个新的字典,每次的值也就相应的保存在了新的字典内.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jerryzhou;

您的鼓励,将是我的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值