Python for循环中的in

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]中的元素进行访问

 

posted @ 2018-09-09 15:18  liyongjun  阅读(643)  评论(0编辑  收藏  举报