gpt4 book ai didi

python - 修改reduced()表达式的返回值修改输入

转载 作者:行者123 更新时间:2023-12-05 09:25:51 25 4
gpt4 key购买 nike

我编写了一个函数,用于将字典中的所有值收集到一个列表中,其中每个值都是一个列表。然而,当我后来修改那个列表时,我发现我原来的字典也被修改了!

from functools import reduce 

d = {'foo': [1,2,3]}
all_vals = reduce(lambda x, y: x + y, d.values())
all_vals.append(4)
print(d)
# {'foo': [1, 2, 3, 4]}

如果字典有多个键/值,则不会发生这种情况:

from functools import reduce 

d = {'foo': [1,2,3], 'bar': [9]}
all_vals = reduce(lambda x, y: x + y, d.values())
all_vals.append(4)
print(d)
# {'foo': [1, 2, 3], 'bar': [9]}

字典现在保持不变。谁能解释为什么 python 有这种行为?

最佳答案

因为在第一种情况下,您的 all_vals 只是 d.values()[0] 因为 reduce lambda 永远不会被调用,因为没有两个元素可以减少彼此。

在第二种情况下,您确实有两个元素组合在一起形成一个新列表,该列表不再引用字典中最初的列表。

关于python - 修改reduced()表达式的返回值修改输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75016292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com