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

为什么Python函数内的操作会修改外部传入的list原对象?

问题原因分析

Python中的列表属于可变对象,函数传参时传递的是对象的引用而非副本,你的recursive_sort函数直接对传入的列表对象做了原地修改,是导致原列表被更改的核心原因:

  • 你将sensor_list传入函数时,形参list_to_sort和外部的sensor_list指向内存中同一个列表对象
  • 函数内部的冒泡交换逻辑list_to_sort[i], list_to_sort[i+1] = list_to_sort[i+1], list_to_sort[i]直接修改了这个列表对象的元素值,没有生成新列表
  • 后续递归调用时的切片list_to_sort[:-1]虽然会生成新子列表,但仅作用于递归层级,最外层调用时的原地修改已经直接改动了原sensor_list的内容
修复方案

在函数开头先对传入的列表做浅拷贝,所有排序操作都在副本上执行,避免改动原列表:

def recursive_sort(list_to_sort, key):
    """
    sort a list by a specified key recursively
    """
    # 新增:创建列表副本,所有操作在副本上执行
    working_list = list_to_sort.copy()
    if len(working_list) == 1:
        return working_list
    for i in range(0,len(working_list) - 1):
        if working_list[i][key] > working_list[i + 1][key]:
            working_list[i], working_list[i+1] = working_list[i+1], working_list[i]

    return recursive_sort(working_list[:-1], key) + [working_list[-1]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:45:06