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

Python函数调用时意外修改外部列表变量的原因是什么?

问题解答

该现象完全符合Python的运行逻辑,你存在的疏漏是没有正确完成列表的复制操作。

原因说明

Python中的变量存储的是对象的内存引用,列表属于可变对象,执行tempList = listToDouble时,并没有生成新的列表实体,只是让tempList和传入的listToDouble(也就是外部的mainList)指向了内存中同一个列表对象。后续对tempList的元素赋值操作,本质就是修改这个共享的列表,所以外部的mainList也会同步变化。

解决方案

你需要先创建原列表的独立拷贝,再对拷贝做修改。对当前存储基础数据类型的一维列表,用任意浅拷贝方式即可:

  • 切片拷贝:tempList = listToDouble[:]
  • list构造器拷贝:tempList = list(listToDouble)
  • copy模块浅拷贝:导入copy模块后执行tempList = copy.copy(listToDouble)

如果后续你需要处理嵌套可变元素的列表(比如列表内部还有子列表),则需要用copy.deepcopy()做深拷贝。

修改后的可运行代码

def DoubleList(listToDouble):
    # 先创建原列表的独立拷贝
    tempList = listToDouble[:]

    for i in range(4):
        tempList[i] *= 2

    return tempList

mainList = [100, 100, 32, 32]
print('List =', mainList) # 输出 [100, 100, 32, 32]

doubledList = DoubleList(mainList)
print('Doubled list =', doubledList) # 输出 [200, 200, 64, 64]

print('Final List =', mainList) # 输出 [100, 100, 32, 32]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:45:05