使用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给列表的是一个地址,当字典声明在循环外的时候,字典始终是第一次声明的那一个,就算一直在追加值,也只不过是将新的值覆盖掉原来的值而已;当字典声明在循环内时,每次循环都会生成一个新的字典,每次的值也就相应的保存在了新的字典内.