Python 为什么不是';t变量值更新?

Python 为什么不是';t变量值更新?,python,Python,这是我的密码: count = 0 number = count while count < 10: print number count = count + 1 count=0 数字=计数 当计数小于10时: 打印号码 计数=计数+1 结果根本不是我所期望的。它打印出100 我完全搞不懂为什么number的值保持为零?为什么不在count更新时更新它?这是因为number的值不是在循环内部分配的,而是在循环外部分配的。在number和count之间没有固定的“绑定”

这是我的密码:

count = 0
number = count

while count < 10:
    print number
    count = count + 1
count=0
数字=计数
当计数小于10时:
打印号码
计数=计数+1
结果根本不是我所期望的。它打印出10
0


我完全搞不懂为什么
number
的值保持为零?为什么不在
count
更新时更新它?

这是因为
number
的值不是在循环内部分配的,而是在循环外部分配的。在
number
count
之间没有固定的“绑定”,但是
number
的值只分配给代码中的
count
一次。
将其更改为以下内容,它将正常工作

count = 0
number = count

while count < 10:
    number = count
    print number
    count = count + 1
count=0
数字=计数
当计数小于10时:
数字=计数
打印号码
计数=计数+1

在Python中,
int
对象是不可变的;您不能更改它们的值。您所能做的就是将名称重新绑定到新的整数对象。这里的
count
number
都只是对
int
对象的引用

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

所有这一切意味着
number
仍在引用
0
;它从来没有反弹过。它肯定不会跟随
count
发生的事情

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

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

在这里,我更改了绑定到列表对象中包含的索引0的内容,无论您查看
foo
还是
bar
,都可以看到更改,这两个引用都指向同一个对象。我从未改变过foo本身;我没有将其重新指定为指向其他内容。

您需要更新循环中
number
的值。Python名称简介: