Python 引用的For循环
我在玩Python中的for
循环,想习惯它们处理变量的方式。
看看下面这段代码:
a=[1,2,3,4,5]
b=a
b[0]=6
做完这个后,b
和a
的第一个元素应该都是6
。=
符号是指向数组的引用,对吧?
现在,我来一个for
循环:
a=[1,2,3,4,5]
for i in a:
i=6
我本以为a
里的每个元素现在都是6
,因为我想象i
是指向a
里的元素,而不是复制它们;不过,似乎并不是这样。
希望能得到一些澄清,谢谢!
3 个回答
0
就像你说的,“= 号是用来指向一个引用的”。所以你的循环只是把 'i' 这个引用依次指向5个不同的数字,每次指向一个。
5
事情并不是这样运作的。这个for循环是在遍历a中的值。变量i其实并不知道a里面有什么。简单来说,发生的事情是:
# this is basically what the loop is doing:
# beginning of loop:
i = a[0]
i = 6
# next iteration of for loop:
i = a[1]
i = 6
# next iteration of for loop:
i = a[2]
i = 6
# you get the idea.
在任何时候,索引处的值都不会改变,唯一改变的就是i的值。
你想要做的是:
for i in xrange(len(a)):
a[i] = 6 # assign the value at index i
5
在Python中,所有东西都被当作引用来处理。当你执行 b[0] = 6
时,其实是把数字 6
放到了这个表达式左边所指定的地方。
在第二个例子中,你把数组里的引用赋值给了 i
,所以 i
先是1,然后是2,再到3……但 i
从来不是数组里的一个元素。因此,当你把6赋值给它时,你只是改变了 i
所代表的东西。
如果你想了解更多细节,可以看看这个链接:http://docs.python.org/reference/datamodel.html。