不允许在 Python 中修改列表迭代器?

2022-01-10 00:00:00 python list iterator

问题描述

简单示例:

myList = [1, 2, 3, 4, 5]
for obj in myList:
  obj += 1
print myList

打印

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

同时:

myList = [1, 2, 3, 4, 5]
for index in range(0,len(myList)):
  myList[index] += 1
print myList

打印

[1, 2, 3, 4, 5]
[2, 3, 4, 5, 6]

结论:

  1. 列表可以使用全局列表访问来修改列表可以
  2. 可以不使用迭代器对象修改列表项
  1. Lists can be modified in place using global list access Lists can
  2. List items can NOT be modified in place using the iterator object

我能找到的所有示例代码都使用全局列表访问器来就地修改列表.修改列表迭代器就这么邪恶吗?

All example code I can find uses the global list accessors to modify the list inplace. Is it so evil to modify a list iterator?


解决方案

for obj in myList: 中,在每次迭代中,objmyList 中的元素.所以对 obj 的更改对 myList 的元素没有任何影响.

in for obj in myList:, in every iteration, obj is a (shallow) copy of the element in myList. So the change on the obj does nothing to myList's elements.

这与 Perl for my $obj (@myList) {}

相关文章