为什么我不能以这种方式改变列表?

Wur*_*bro -1 python reference function list

我想要一个很好的set all list elements to a default value功能.我提出的那个不起作用,但我的第二个解决方案确实如此.任何人都可以告诉我它为什么单向工作而不是另一种方式?

第一解决方案

def set_all(the_list,value): #NOT doing anything
    for item in the_list:
        item = value
Run Code Online (Sandbox Code Playgroud)

二解决方案:

def set_all(the_list,value): #working as intended
    for i,item in enumerate(the_list):
        the_list[i] = value
Run Code Online (Sandbox Code Playgroud)

Tho*_*zco 5

当你这样做时:

for item in the_list:
    item = value
Run Code Online (Sandbox Code Playgroud)

您只是将名称 重新分配给其他名称item(value具体而言),但您没有触及列表对原始项目的引用 the_list[i].

因此,您实际上并未触摸列表,因此它不会更改.


你可以这样看:

执行此操作时for item in the_list,您将创建对基础对象的新引用:item.

当你这样做时item = value,你正在改变那个引用并将其指向别的东西.但另一个参考,列表对底层对象的参考,保持不变.

当然,当你这样做时the_list[i],你实际上正在改变列表对象的引用,这就是它工作的原因.