为何Python函数内赋值后原列表未被修改?输出不符求解
问题原因解析
先把你的代码还原出来:
def modif(tab1, tab2): tab1 = tab2 liste1 = [1,2,3] liste2 = [4,5,6,7,8] print(f"{liste1[0]};", end="") modif(liste1, liste2) print(liste1[0])
核心原因:Python的对象引用传递逻辑
Python里函数参数是传对象引用,但你在函数里写tab1 = tab2,只是把函数内部的局部变量tab1的指向改了——它原本指向liste1对应的[1,2,3]列表对象,现在换成指向liste2的[4,5,6,7,8]了。但这个操作和外部的liste1变量没关系,它还是牢牢指着原来的列表,所以调用函数后打印liste1[0]还是1。
实现预期效果的正确写法
要是想让liste1变成liste2的内容,得修改tab1指向的原列表对象,而不是改tab1的指向。有两种常用写法:
- 切片替换整个列表内容:
def modif(tab1, tab2): tab1[:] = tab2
- 清空原列表后追加新内容:
def modif(tab1, tab2): tab1.clear() tab1.extend(tab2)
用上面任意一种写法,运行代码就能得到你预期的1;4输出。
内容的提问来源于stack exchange,提问作者GoodWood
相关产品推荐
相关产品推荐

