2011-08-26 73 views
1

我在Python中使用for循环,并试图习惯它们处理变量的方式。引用Python的Python

以下面的片为代码:

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的元素,而不是复制它们;但是,这似乎并非如此。

澄清将不胜感激,谢谢!

回答

5

python中的所有内容都被视为引用。当你做b[0] = 6时会发生什么,你将6分配到由该表达式的LHS定义的适当位置。

在第二个示例中,您将数组中的引用分配给i,以便i为1,然后是2,然后是3,但是i绝不是数组的元素。所以当你指定6时,你只需改变i表示的东西。

http://docs.python.org/reference/datamodel.html是一个有趣的阅读,如果你想知道更多的细节。

5

这不是它的工作原理。 for循环遍历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 
+1

“变量我实际上对自身内容没有任何意义” - 这不完全正确,“i”是对“a”中值的引用,但赋值将会将“i”更改为引用到别的东西,整数是不可变的,所以没有办法通过修改'for'循环中的'i'来改变OP的列表。但考虑'a = [[1],[2]]'然后'我在a:i [:] = [6]'中。 'a'将变成'[[6],[6]]'。 –

+0

@ F.J。这是因为'a'的值本身是可变类型。它与a中的位置无关,而是与物体的位置无关,无论它们是否位于a位置。 – cwallenpoole

+1

这里没有任何参数,我只是想澄清一下,因为新手读者可能会将您的语句解释为“无法通过循环其值来修改列表”,当您有可变值时,这是不正确的。 –

0

正如你所说的,“等号点的参考”。所以你的循环只是重新分配'我'参考5个不同的数字,每一个依次。

+0

我看到你的答案,并打了自己的声音。非常简单!有没有办法让for循环以我想要的方式运行? (明确的Upvote - 你触及问题的核心。) – Richard