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])
。