Python for循环是通过引用工作的吗?

Python for循环是通过引用工作的吗?,第1张

概述在 Python中使用for循环迭代列表中的项目时,更改项目(下方)是否会更改项目中的相应项目? for item in items: item += 1 项目中的每个项目是否会增加或保持与循环之前相同? [注意:我对Python 2.7和3.x感兴趣] 不,Python中的变量不是指针. 它们引用堆上的对象,并且分配给变量不会更改引用的对象,而是更改变量.变量和对象就像绑在气球上的标签; 在 Python中使用for循环迭代列表中的项目时,更改项目(下方)是否会更改项目中的相应项目?

for item in items:    item += 1

项目中的每个项目是否会增加或保持与循环之前相同?

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

解决方法 不,Python中的变量不是指针.

它们引用堆上的对象,并且分配给变量不会更改引用的对象,而是更改变量.变量和对象就像绑在气球上的标签;赋值将标签转换为另一个气球.

请参阅此previous answer of mine以探索气球和标签的想法.

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

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

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

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

总结

以上是内存溢出为你收集整理的Python for循环是通过引用工作的吗?全部内容,希望文章能够帮你解决Python for循环是通过引用工作的吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1191093.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存