我正在做一个教程,有一段代码我不明白。它更新了一个字典(项目),但我不明白为什么主列表(项目)也会更新
当我使用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)
您的
item
不是None,因此else子句更新字典:您的列表中只有一个元素,一个dict。当您在列表上迭代时,您会得到对元素的引用。口述是可变的,因此您可以更改它们
然后项引用风管对象(它是列表中唯一的元素)。更新它会更改其内容。您可以看到项目和列表指向同一元素:
id(item) == id(items[0])
它是同一个对象,因此当您更改它时,您的列表项也会更改
相关问题 更多 >
编程相关推荐