Python 为什么在使用括号时只能更改for循环中的列表?

Python 为什么在使用括号时只能更改for循环中的列表?,python,list,iteration,Python,List,Iteration,在第二个示例中,当我使用括号来项时,可以更改列表 list1 = [[1, 2]] for item in list1: item = [88, 88] print(list1) ----------------- list2 = [[[1, 2]]] for item in list2: item[0] = [88, 88] print(list2) 输出: [[1, 2]] [[[88, 88]]] 我搜索了项只是元素的临时名称。而不是物品本身。 那

在第二个示例中,当我使用括号来
时,可以更改列表

list1 = [[1, 2]]

for item in list1:
    item = [88, 88]

print(list1)

-----------------

list2 = [[[1, 2]]]

for item in list2:
    item[0] = [88, 88]

print(list2)
输出:

[[1, 2]]   
[[[88, 88]]]  
我搜索了
只是元素的临时名称。而不是物品本身。
那么,为什么在将
[]
添加到“item”时列表本身可以更改?

据我所知,在第一个示例中,当程序通过for循环时,它会得到item的值(即[1,2]),在for循环中,您将变量item更改为[88,88],而不是实际更新列表本身,而是更新包含[1,2]的变量

在第二个示例中,for循环将变量项作为列表2中的第二个列表返回。使用方括号时,它会在该列表中获取索引0,这意味着它会查找列表中的第0个元素,然后将其更新为您的值[88,88]


希望这能有所帮助。

首先,我想你应该读一下

我只是想澄清一下:

  • list1=[[1,2]]
    表示您有一个包含列表的
    list1
    ,该列表包含
    list1[0]
    处的列表
    [1,2]
  • list2=[[[1,2]]
    表示您有
    list2
    包含列表
    [[1,2]]
其次,为了将列表中第一项的值从
[1,2]
更改为
[88,88]
,您可以编写:

list1 = [[1, 2]]

for item in list1:
    item[0] = 88
    item[1] = 88

print(list1)
输出:

[[88, 88]]
现在,让我们解释一下:

对于For循环的每次迭代,变量
item
仅分配列表中某个项的值的副本,因此对
item
所做的更改不会反映在列表中

这就是为什么在您的第一次尝试中(使用
list1
),当您迭代列表时-
item=[88,88]
只更改了副本,而没有更改实际列表(此处的副本是列表
[1,2]

在您的第二次尝试中,即:

for item in list2:
    item[0] = [88, 88]

对于For循环的每次迭代,您都要访问
项[0]
,它是
项中第一个元素的引用的副本。因此,当您为其赋值时,列表中的值会发生更改。

预期的输出是什么?我不期望任何结果,我只是想知道为什么会发生这种情况。这是否回答了您的问题?还要检查这一点,不同的情况但相同的原因
item[0]
是(变异)方法调用的语法糖:
item[0]=[88,88]
相当于
item.\uuuuu setitem\uuuu0[88,88])