gpt4 book ai didi

python - Python for 循环是否通过引用工作?

转载 作者:IT老高 更新时间:2023-10-28 20:41:24 25 4
gpt4 key购买 nike

当在 Python 中使用 for 循环遍历列表中的项目时,更改 item(如下)会更改 items 中的相应项目>?

for item in items:
item += 1

items 中的每一项是递增还是保持与循环前相同?

[注意:我会对 Python 2.7 和 3.x 感兴趣]

最佳答案

不,Python 中的变量不是指针。

它们改为引用堆上的对象,并且分配给变量不会更改引用的对象,而是变量。变量和对象就像绑在气球上的标签; assignment 将标签重新绑定(bind)到不同的气球。

查看 previous answer of mine进一步探索气球和标签的想法。

也就是说,一些对象类型实现了特定的就地添加行为。如果对象是可变的(气球本身可以改变),那么就地添加可以被解释为突变而不是赋值。

因此,对于整数,item += 1 实际上与 item = item + 1 相同,因为整数是不可变的。您必须创建一个新的整数对象并将 item 标签绑定(bind)到该新对象。

另一方面,列表 是可变的,并且 lst += [other, items] 被实现为 lst.__iadd__([other, items] ) 并且改变了 lst 气球本身。赋值仍然发生,但它是同一对象的 重新赋值,因为 .__iadd__() 方法只是返回 self 而不是新对象。我们最终将标签重新绑定(bind)到同一个气球。

循环只是在每次迭代时为您提供对列表中下一项的引用。它不允许您更改原始列表本身(这只是另一组气球标签);相反,它会为包含的每个项目提供一个新标签。

关于python - Python for 循环是否通过引用工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14814771/

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