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元素发生改变.... 展开
既然对象迭代的时候不能重新赋值,那么为什么语句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元素发生改变.... 展开
1个回答
展开全部
哦。其实你自己找到了答案。这个不用问为什么。因为它就是这个样子的。
如果你一定要问,那么我解释一下。
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]]
这样你明白了吗?
如果你一定要问,那么我解释一下。
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]]
这样你明白了吗?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询