我正在做一个教程,并且有一段我不理解的代码片段。它更新了一个字典(项目),但我不明白为什么主列表(项目)也会更新。
当我使用lambda函数或for。
过滤我的列表时,情况也是如此 你可以解释一下吗?提前谢谢。items = [{'name': 'toto', 'price': 99}]
name = 'toto'
#item = next(filter(lambda x: x['name'] == name, items), None)
for x in items:
if x['name'] == name:
item = x
else:
item = None
print(item)
if item is None:
item = {'name': name, 'price': 77}
items.append(item)
else:
item.update({'price': 100})
print(item)
print(items)
答案 0 :(得分:0)
您的item
不是None,所以else子句更新字典:
if item is None:
item = {'name': name, 'price': 77}
items.append(item)
else:
item.update({'price': 100})
你的列表中有一个元素,一个字典。当您遍历列表时,您将获得对元素的引用。 Dicts是可变的,所以你可以改变它们。
然后item引用管道对象(这是列表中唯一的元素)。更新它会更改其内容。您可以看到项目和列表指向相同的元素:
id(item) == id(items[0])
它是同一个对象,因此当您更改它时 - 您的列表项也会更改。