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

Python引用传参为何特殊?参数未变更及变量指向疑问解析

Python函数传参中的引用问题解答

先看你提供的代码:

arr = [1]

def f1(lst):
    lst.append(2)
    print(lst)
    lst = 2
    print(lst)

f1(arr)
print(arr) # [1,2]

为何Python引用传参后参数未变更为指定值?

Python的函数传参是传对象引用,不是传统意义上能直接修改外部变量指向的“传引用”:

  • 调用f1(arr)时,函数内部的lst变量会拿到和arr相同的引用,也就是两者都指向内存里那个[1]的列表对象。这时候对lst调用append(2),是直接修改了这个列表对象本身,所以外部的arr也能看到这个变化(因为它们指向同一个对象)。
  • 但执行lst = 2时,并不是修改原来的列表对象,而是把函数内部的lst变量重新绑定到了新的整数对象2上。这个操作只会改变函数内部lst的指向,和外部的arr没有关系,外部的arr仍然指向原来的列表对象,所以最后打印arr还是[1,2]。

执行“lst = 2”时,lst变量指向什么?是否与arr不再关联?

执行lst = 2后,lst变量指向的是整数对象2,此时它和arr确实不再关联了。因为arr依旧指向最初的列表对象,而函数内部的lst已经切换了指向的目标,两者的引用完全分道扬镳。

内容的提问来源于stack exchange,提问作者YeongTak Cho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 00:36:25