如何解决循环中的python参考和迭代器
我会在涉及的python脚本上遇到一个细微的错误。基本上出了什么问题
def inc(x):
return x+1
a = 1
b = 2
c = 3
for x in [a,b]:
print(id(x),id(a),id(b))
for x in [a,b]:
x = inc(x)
c = inc(c)
print(a,b,c)
如第一个for循环所示,迭代器x正在引用正在进行的变量。仍然当我们为该迭代器分配一个值时,pointee(referencee)变量没有改变。我真的没想到这种行为,这不是python,不是吗? 有人可以对此有所启发吗?
解决方法
在您的第一个循环中,您将打印x,a,b
的ID。 x
-是局部变量,不是a
或b
。尽管引用的编号相同,但引用实例与a
或b
不同。整数在python中是不可变的。当您执行类似x = x + 1
的操作时,您所做的不是通过引用更改值,而是更改引用以指向新值。
此外,请记住,在python中,即使在引用整数之前,也要计算-5至255之间的整数。那是许多优化的python之一。
因此,在第一次迭代中,x
拥有一个a
的值,并且实际上是1
-它已经被计算并且指向内存中的相同位置。在第二次迭代中,x
指向与b
相同的值。但是无论哪种情况,引用本身都是相同的。
如果您的a,b,c
像列表或字典一样易变,您将观察到不同的行为。可能是您所期望的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。