You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 21:35:04