Python 引用的For循环

1 投票
3 回答
534 浏览
提问于 2025-04-17 00:25

我在玩Python中的for循环,想习惯它们处理变量的方式。

看看下面这段代码:

a=[1,2,3,4,5]
b=a
b[0]=6

做完这个后,ba的第一个元素应该都是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

撰写回答