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

Python手写快速排序返回结果正确但第二次打印原列表异常,求原因

问题原因
  • Python中列表属于可变对象,函数传参时传递的是列表的内存引用而非独立副本,调用Quick(xxx)时,函数内的List变量初始和外部xxx指向同一个列表对象。
  • 你代码中的双指针交换逻辑List[l_idx], List[r_idx] = List[r_idx], List[l_idx]执行时,会直接修改当前List指向的原列表(也就是外部的xxx)的元素顺序,这一步修改是实时生效到外部列表的。
  • 后续List = Quick(List[0: (l_idx)]) + [List[l_idx]] + Quick(List[(l_idx + 1):])只是给函数内的局部变量List重新绑定了一个新拼接的列表对象,这个操作不会覆盖外部xxx的指向,但之前交换步骤对原列表的修改已经无法撤销,所以最终打印xxx得到的是被中间步骤修改后的乱序列表。
修复方案

如果希望调用函数不修改原列表,可以在函数入口先创建原列表的副本,所有操作都在副本上执行:

def Quick(List):
    # 先拷贝生成独立副本,后续操作不影响原列表
    List = List.copy()
    if len(List) <= 1:
        return List
    pivot = List[0]
    l_idx = 0
    r_idx = len(List) - 1
    
    while l_idx != r_idx:
        while List[l_idx] < pivot and l_idx < r_idx:
            l_idx += 1
        while List[r_idx] > pivot and l_idx < r_idx:
            r_idx -= 1
        if l_idx < r_idx:
            List[l_idx], List[r_idx] = List[r_idx], List[l_idx]    
    
    List = Quick(List[0: (l_idx)]) + [List[l_idx]] + Quick(List[(l_idx + 1):])
    return List

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:54:02