首页 > 解决方案 > 我将字典附加到列表中,在打印时我只得到列表字典中最后附加的东西

问题描述

class one:
    def __init__(self,id,d):
        self.id=id
        self.d=d
    def printfun(self):
        for i in l:
            print(i.id,i.d)

l=[]
d={}
for i in range(2):
    id=int(input())
    d["a"]=int(input())
    d["b"]=int(input())
    o=one(id,d)
    l.append(o)
o.printfun()

and my output is: 100 1 2 101 3 4 100 {'a': 3, 'b': 4} 101 {'a': 3, 'b': 4} 我将字典附加到列表中,而打印时我只得到last appended列表字典中的东西。如何获取我在列表中附加的所有字典,以及为什么我没有获得我在列表中附加的第一本字典。

标签: python-3.xlistdictionary

解决方案


您需要将新字典附加到列表中,否则您将附加对已修改值的旧列表的引用。

Python 从不隐式复制对象。当你设置 dict2 = dict1 时,你让它们引用同一个精确的 dict 对象,所以当你改变它时,所有对它的引用都会继续引用当前状态的对象。 https://stackoverflow.com/a/2465932/4361039

l=[]

for i in range(2):
    id=int(input())
    a=int(input())
    b=int(input())
    o=one(id, {"a": a, "b": b})
    l.append(o)

o.printfun()

推荐阅读