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

Python中函数修改列表却不修改普通变量的原因是什么?

Python中列表与普通变量作为函数参数的差异原因

测试案例与现象

列表作为参数的情况

def test(a): 
    a.append(1000) 
    return a 

def main(): 
    a = [1,2,3] 
    print(a, test(a))
    
main()

输出结果:

[1,2,3,1000] [1,2,3,1000]

整数作为参数的情况

def test(a): 
    a = a + 10
    return a 

def main(): 
    a = 5
    print(a, test(a))
    
main()

输出结果:

5 15

差异的核心原因

Python的对象分为可变对象和不可变对象,函数参数传递的是对象的引用,这直接导致了两种类型的表现差异:

  • 不可变对象(如整数、字符串、元组):
    这类对象创建后无法修改内部内容。函数中执行a = a + 10时,并没有修改原有的整数对象5,而是生成了一个新的整数对象15,并让函数内的局部变量a指向这个新对象。外部的变量a仍指向原对象5,因此不会被改变。

  • 可变对象(如列表、字典、集合):
    这类对象允许修改内部元素。当列表传入函数后,函数内的参数a和外部的a指向同一个列表对象。调用a.append(1000)是直接对这个共享对象的内容进行修改,所以外部的列表也会同步看到变化。

避免修改原列表的方法

如果不想让函数改动原列表,可以在传入时创建列表的副本:

def main(): 
    a = [1,2,3] 
    print(a, test(a.copy()))  # 或使用 test(a[:]) 创建切片副本

此时函数修改的是副本,原列表内容保持不变。

内容的提问来源于stack exchange,提问作者Bianca I.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:09:33