Python中的Foreach未按预期工作

Python中的Foreach未按预期工作,python,for-loop,foreach,Python,For Loop,Foreach,我想切换列表中的每一个元素: s = [False] * 5 for item in s[::2]: item = not item print(s) 但它不起作用 [False, False, False, False, False] 然而,这项工作正如预期的那样: for i in range(0, len(s), 2): s[i] = not s[i] print(s) [True, False, True, False, True] 为什么会发生这种情况?在

我想切换列表中的每一个元素:

s = [False] * 5

for item in s[::2]:
    item = not item

print(s)
但它不起作用

[False, False, False, False, False]
然而,这项工作正如预期的那样:

for i in range(0, len(s), 2):
    s[i] = not s[i]

print(s)

[True, False, True, False, True]

为什么会发生这种情况?

在第一种情况下,您将分配给在循环过程中创建的变量。在第二种情况下,您将分配给数组中的索引。循环的每次迭代都会重置变量

,因为

item = not item
实际上,您要做的是将对数组中对象的引用更改为对数组外对象的另一个引用<代码>项只是数组中对象引用的副本

第二个代码按预期工作,因为它更改了数组本身中的引用,而不是引用副本中的引用。

这些行:

for item in s[::2]:
    item = not item
与此等效:

for i in range(0, len(s), 2):
    item = s[i]
    item = not item

因为
item
与恰好包含相同内容的
list[i]
是不同的变量(因为
for
循环分配给
item
)。分配给
项目
不会更改
列表