for循环的语法格式如下:
for iterating_var in sequence:
statement(s)
in 后面跟的是一个序列,如列表、元组、字符串
序列都有一个特征,就是可以进行索引操作,如sequence[0]、sequence[1]
当for被执行时,iterating_var 依次被赋值sequence[0]、sequence[1]、……
注意这里的赋值是浅拷贝
看下面两个例子
1.
a = [[1,2]]
for i in a:
i[0] = 3
print a
[[3, 2]]
这个循环只循环一次,因为列表a中只有一个元素,即a[0] = [1,2],可以用C语言思想去理解a[0]中存放的是列表[1,2]的地址
所以i = a[0]时i中存放的也是列表[1,2]的地址,故i[0] = 3作用相当于a[0][0] = 3
2.
a = [1,2]
for i in a:
i = 5
print a
[1, 2]
这里的i = 5,已经和a没有任何关系了,因为是浅拷贝,所以i只保存了a中元素的值,i再怎么改变也不会影响a
所以print a 还是 [1,2]
那为什么1中的[[1,2]]就变成[[3,2]]呢,那是因为i虽然只保存了a中的值(浅拷贝),但是在1中,a中的值如a[0]它本身就是[1,2]的地址,所以使用这个地址仍然可以通过索引对[1,2]中的元素进行访问