在"for xxx in yyy"中,我们得到的xxx是什么?

对一个简单的list循环,并尝试改变其值,结果没有发生变化
下载 (1.51 KB)
2011-05-23 16:58



对一个dictionary的list循环,则可以改变list的值

下载 (2.25 KB)
2011-05-23 16:58

作者: lemoncookie   发布时间: 2011-05-23

你要知道,所有的变量名都仅仅是引用

在"for i in (1,2,3)"里,i会分别指向1,2,3
之后你用i=0,按你的想法就相当于1=0,2=0,3=0,这是完全不可能发生的
实际发生的情况是,变量i改为指向0

后一个例子你并没有给i直接赋值,而是操作i的属性,这是完全可以的
虽然前一个例子中理论上你也可以尝试修改i的属性,但整数是不可变类,你真的去修改的话会报错

作者: Kabie   发布时间: 2011-05-23

python内建类型分为可变的和不可改变的
list1 = [1, 2, 3]
for i in list1:
    i = 0
这里i是int类型,是不可变对象,对于每一次循环获得的i仅仅是值相同的另外一个对象而已。
循环内所做的任务操作都不会影响到list1中的对象。
对于dict:
for i in dict:
    i['id'] = i['id'] + 1
循环中的每个i对象是一个dict对象,是mutable,因此他们都是dict每个元素的引用而已,都指向了同一个对象,所有循环内部对元素的操作影响到了原来的对象。

作者: ccporxy   发布时间: 2011-05-23