在考虑字典列表时,我发现了这个奇怪的属性。请考虑以下内容:
my_list=[{}]*3
my_list[0]['a']=1
print my_list
即使我专门尝试仅更改列表的0
元素,为什么列表中的所有元素也会同时更改?
如果我想分别处理每本词典该怎么办?
更一般地说,除了列出字典之外,还有更好的方法来存储一定数量的字典吗?
答案 0 :(得分:1)
创建my_list=[{}]*3
时,相同的引用已经被n
次数了。
因此,当您要更改特定值时,请避免这样做。
您可以尝试这样:
my_list=[{} for i in range(3)]
答案 1 :(得分:1)
是的,乍一看似乎有点奇怪,但是您需要了解如何在python中处理字典。
第一行:您正在创建{}
的3份副本并将其存储在列表中。
现在这里发生了什么:
{}
如何解决这个问题:
my_list = []
for i in range(3):
my_list.append({})
my_list[0]['a']=1
print(my_list)
输出:
[{'a': 1}, {}, {}]
答案 2 :(得分:0)
list=[{}]*3
执行此操作时,将使用相同的引用创建3次相同的对象。因此,如果您更改一个,所有的都将更改。在python中,不需要声明字典的大小。只需声明一个空字典。