gpt4 book ai didi

python - 为什么一个功能有效而其他功能无效?可变性或不变性在这里如何发挥作用?

转载 作者:太空宇宙 更新时间:2023-11-03 15:42:11 24 4
gpt4 key购买 nike

假设我有一个这样的列表 li = [1, 2, 3, 4, 5] 和一个缩放函数

def scale(data, factor):
for j in range(len(data)):
data[j] *= factor

现在,如果我将 li 传递给带有 factor = 2scale 函数,我的列表就会被修改。那就是实际参数在这里被改变了。因此,如果我在执行上述函数后打印 li,它会给出 [2, 4, 6, 8, 10] 而不是原始的。

缩放功能的另一种实现方式如下:-

def scale(data, factor):
for val in data:
val *= factor

现在如果我执行 scale(li, 2) 那么它不会修改实际参数。所以 li 保持为 [1, 2, 3, 4, 5]。所以我的问题是为什么一个修改列表而另一个不修改?这与可变性或不变性有什么关系吗?

最佳答案

data[j] *= factordata[j] = data[j] * factor 相同,因此您正在修改 data 对象。该操作调用了listdata__setitem__方法,将data[j] * factor的结果放入相应的位置。

当您执行 for val in data: 时,val 中存储了对 data 中项目的引用。该项目(对象)对从中获取的列表 data 一无所知。您现在只使用项目本身,而不是包含对它的另一个引用(以及 val)的列表。

val *= factor 创建一个新对象(乘积的结果)并将对它的引用放入变量 val 中。 data 仍然包含对赋值前位于 val 中的旧对象/值的引用。

在这里查看更多信息:https://stackoverflow.com/a/8140747/248296

关于python - 为什么一个功能有效而其他功能无效?可变性或不变性在这里如何发挥作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51986493/

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