为什么更改list[i]会影响列表,而更改element不在`for i,element in inputList`中



在Python中,以下代码将修改输出

def changeList(string):
strList = list(string)
for i, char in enumerate(string):
if char == 'a':
strList[i] = 'b'
return "".join(strList)
print(changeList("ab"))

按预期打印出"bb"。但是以下功能:

def changeList(string):
strList = list(string)
for i, char in enumerate(string):
if char == 'a':
char = 'b'
return "".join(strList)

打印出"ab"。为什么设置char的工作方式不同?我原以为char是一个指向字符串[I]的指针,但看起来我误解了引擎盖下发生了什么?

在第一个for循环中,通过访问strList[i]可以修改列表中的项目,其中,与第二个循环一样,列表项目获得名称标记char。然后,当执行char = 'b'时,名称标记将从列表项中删除并应用于'b'。列表项本身未被修改,因此返回的列表保持不变。

在第二个示例中,您正在重新分配char的值。在for循环中,char被设置为字符串的字符(如"a"或其他什么(。然后,您会说"好吧,现在char是'b'"。

char不链接到strList[i]char独立于正在移动的字符串。如果你想要第二种工作方式,你必须再添加一行strList[i] = char

最新更新