这是我的代码:
count = 0
number = count
while count < 10:
print number
count = count + 1
结果不是我所期待的。它打印出10 0
。
我完全不知道为什么number
的值保持为零?为什么不更新为count
更新?
答案 0 :(得分:6)
在Python中,int
个对象是不可变的;你无法改变它们的价值。您所能做的就是重新绑定一个新的整数对象的名称。 count
和number
都只是对int
个对象的引用。
表达式count + 1
不会改变count
。它返回一个不同的 int
对象并重新绑定count
,现在引用该新值。
所有这些意味着number
仍在引用0
;它永远不会反弹。它肯定不会跟踪count
发生的事情。
将此与 mutable 对象进行比较,您可以 更改值本身。例如,列表对象是可变的,因为您可以更改其索引绑定的内容。然后,两个名称可以引用该列表对象,然后通过两个引用可以看到任何更改:
>>> foo = [1]
>>> bar = foo
>>> bar
[1]
>>> foo[0] = foo[0] + 1
>>> bar
[2]
在这里,我更改了列表对象中绑定0 包含的内容,并且只要您查看foo
或bar
,就会看到更改。同一个对象。我从未改变foo
本身;我没有重新指定它指向其他东西。
答案 1 :(得分:2)
这是因为number
的值未在循环内部分配,而是在外部分配。没有永恒的约束力。在number
和count
之间,但number
的值仅在您的代码中分配到count
一次。
将其更改为以下内容即可。
count = 0
number = count
while count < 10:
number = count
print number
count = count + 1