python-3.x - 我将字典附加到列表中,在打印时我只得到列表字典中最后附加的东西
问题描述
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 从不隐式复制对象。当你设置 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()