列表/字典工作更新,但我不知道为什么

2024-06-17 10:28:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个教程,有一段代码我不明白。它更新了一个字典(项目),但我不明白为什么主列表(项目)也会更新

当我使用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)

Tags: 项目lambda函数namenone列表forif
1条回答
网友
1楼 · 发布于 2024-06-17 10:28:06

您的item不是None,因此else子句更新字典:

if item is None:
    item = {'name': name, 'price': 77}
    items.append(item)
else:
    item.update({'price': 100})

您的列表中只有一个元素,一个dict。当您在列表上迭代时,您会得到对元素的引用。口述是可变的,因此您可以更改它们

然后项引用风管对象(它是列表中唯一的元素)。更新它会更改其内容。您可以看到项目和列表指向同一元素:

id(item) == id(items[0])

它是同一个对象,因此当您更改它时,您的列表项也会更改

相关问题 更多 >