【发布时间】:2022-11-09 03:57:21
【问题描述】:
以下演示代码:
mydict = {}
mylist = []
mydict["s"] = 1
mydict["p"] = "hasprice"
mydict["o"] = 3
print(mydict)
mylist.append(mydict)
mydict["s"] = 22
mydict["p"] = "hasvat"
mydict["o"] = 66
print(mydict)
mylist.append(mydict)
print(mylist)
打印出以下结果:
[{'s': 22, 'p': 'hasvat', 'o': 66}, {'s': 22, 'p': 'hasvat', 'o': 66}]
我想到的唯一解释是 mydict 是通过引用分配的,因此列表项都指向同一个内存对象。这是原因吗?
如何正确地将多个不同的字典附加到列表中?
我在一个循环中构建每个 mydict 字典,然后想将它附加到我最终将写入 JSON 文件的列表中。
【问题讨论】:
-
正确的。该列表包含两次相同的 dict 对象。
-
如果像您的示例一样,每个字典的键都相同,您可以编写一个函数,将值作为参数并使用公共键和新值构造一个新字典。像
make_dict(22,"hasvat",66)这样的东西。作为一个额外的好处,这将避免您面临的混叠问题。 -
id函数是一个很好的函数,用于测试两个事物是否指向同一个对象。评估id(mydict[0])和id(mydict[1])将证实您对列表项指向同一事物的正确怀疑。
标签: python