为什么变量值不更新?

时间:2014-08-15 11:34:13

标签: python

这是我的代码:

count = 0
number = count

while count < 10:
    print number
    count = count + 1

结果不是我所期待的。它打印出10 0

我完全不知道为什么number的值保持为零?为什么不更新为count更新?

2 个答案:

答案 0 :(得分:6)

在Python中,int个对象是不可变的;你无法改变它们的价值。您所能做的就是重新绑定一个新的整数对象的名称。 countnumber都只是对int个对象的引用。

表达式count + 1不会改变count。它返回一个不同的 int对象并重新绑定count,现在引用该新值。

所有这些意味着number仍在引用0;它永远不会反弹。它肯定不会跟踪count发生的事情。

将此与 mutable 对象进行比较,您可以 更改值本身。例如,列表对象是可变的,因为您可以更改其索引绑定的内容。然后,两个名称可以引用该列表对象,然后通过两个引用可以看到任何更改:

>>> foo = [1]
>>> bar = foo
>>> bar
[1]
>>> foo[0] = foo[0] + 1
>>> bar
[2]

在这里,我更改了列表对象中绑定0 包含的内容,并且只要您查看foobar,就会看到更改。同一个对象。我从未改变foo本身;我没有重新指定它指向其他东西。

答案 1 :(得分:2)

这是因为number的值未在循环内部分配,而是在外部分配。没有永恒的约束力。在numbercount之间,但number的值仅在您的代码中分配到count一次。
将其更改为以下内容即可。

count = 0
number = count

while count < 10:
    number = count
    print number
    count = count + 1