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

Python列表排序出现意外结果,仅操作目标列表却修改了原列表

问题原因

Python中的列表属于可变对象,执行sortedList = numList的操作时,并没有生成新的列表副本,只是给内存中同一个列表对象绑定了第二个变量名。两个变量指向完全相同的内存地址,后续你调用的sort()方法本身是原地修改列表的方法(不会生成新的列表对象),所以无论通过哪个变量名修改列表,作用的都是同一个对象,最终表现就是原列表同步被修改。

解决方案

可任选以下任意一种方案实现仅排序新列表、不改动原列表的需求:

  • 方案1:使用列表切片生成浅拷贝
    将赋值语句修改为sortedList = numList[:],切片操作会生成独立的新列表对象,对新列表的修改不会同步到原列表。
    示例代码:
    def sorted_demo(numList):
        print(numList)
        sortedList = numList[:]
        sortedList.sort()
        print(numList)
        print(sortedList)
    
  • 方案2:使用list()构造函数生成新列表
    赋值语句改为sortedList = list(numList),同样会生成原列表的浅拷贝,修改新列表不影响原列表。
  • 方案3:直接使用sorted()内置函数(推荐)
    Python内置的sorted()函数会直接返回排序后的新列表,完全不会修改原列表,不需要额外手动拷贝,代码更简洁:
    def sorted_demo(numList):
        print(numList)
        sortedList = sorted(numList)
        print(numList)
        print(sortedList)
    
  • 方案4:使用copy模块实现浅拷贝
    针对更复杂的使用场景,可以导入copy模块实现显式拷贝:
    import copy
    sortedList = copy.copy(numList)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:54:03