python 2.7 对象迭代和数字迭代的疑惑.

为什么对象迭代时,不能对元素重新赋值,但是数字迭代就可以?stat和stats[i]不都是字符串对象么?既然对象迭代的时候不能重新赋值,那么为什么语句stat=[]没有报... 为什么对象迭代时,不能对元素重新赋值,但是数字迭代就可以?stat和stats[i]不都是字符串对象么?
既然对象迭代的时候不能重新赋值,那么为什么语句stat=[]没有报错?它实际上没有成功运行啊

SHELL测试代码如下:

>>> stats=['','','','','','']
>>> for i in range(len(stats)):
print type(stats[i])

<type 'str'>
<type 'str'>
<type 'str'>
<type 'str'>
<type 'str'>
<type 'str'>
>>> for stat in stats:
print type(stat)

<type 'str'>
<type 'str'>
<type 'str'>
<type 'str'>
<type 'str'>
<type 'str'>
#看起来两种迭代中stat和stat[i]没有什么区别?请看下面:
>>> for stat in stats:
stat=[]

>>> stats
['', '', '', '', '', '']
#没有报错,但是stats并没有变化!这是为何?
>>> for i in range(len(stats)):
stats[i]=[]

>>> stats
[[], [], [], [], [], []]
>>>
#stats元素发生改变....
展开
 我来答
bdwisyou7d
2013-07-10 · TA获得超过1.3万个赞
知道大有可为答主
回答量:3774
采纳率:81%
帮助的人:1042万
展开全部
哦。其实你自己找到了答案。这个不用问为什么。因为它就是这个样子的。

如果你一定要问,那么我解释一下。
for stat in stats:

这里stat其实是一个指针,指向了stats[i]这样的元素。

关键是下面一句
stat=[]
这一句话的意思,是建立一个[],然后用stat表达。这相当于,你用stat这个指针原来指向stats[i],现在又指向[]

这样当然不是赋值的意思。而是更换指针的指向的对象。

我再给你举例说一下。

stats=["abc",[1,2,3]]
for stat in stats:
if type(stat)==list: stat[:]=[5,6]
print stats
结果是
["abc", [5,6]]
这样你明白了吗?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式