Python中for item in list遍历无法修改列表元素的原因咨询
为什么第一段遍历列表的代码无法修改元素?
先看你写的两段代码:
第一段(无法修改列表):
board = ['b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b'] for item in board: if item == 'b': item = 'a' print(board)
第二段(能成功修改):
board = ['b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b'] for i in range(0, len(board)): if board[i] == 'b': board[i] = 'a' print(board)
核心原因:临时副本 vs 直接访问原元素
- 第一段代码里,
for item in board循环时,item是列表中每个元素的临时副本。你执行item = 'a',只是把这个临时变量的值改成了'a',和原列表里的元素没有任何关系,原列表自然不会变。 - 第二段用索引遍历的方式,
board[i]是直接定位到列表第i个位置的原元素,修改board[i]就是直接操作列表里的对应位置,所以能成功把所有'b'替换成'a'。
简单说,第一段改的是“替身”,第二段改的是“本尊”,结果自然不一样。
内容的提问来源于stack exchange,提问作者Yhomas
相关产品推荐
相关产品推荐

