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

插入排序代码异常:原列表被意外排序的原因及解决

Python列表赋值后原列表被修改的问题解决

问题原因

在Python中,列表属于可变对象,执行myList = UnsortList时并没有创建新的列表副本,只是让myList和UnsortList指向内存中同一个列表对象。因此调用InsSort函数修改myList时,本质是直接修改了这个共享的列表,导致原本该保留原始状态的UnsortList也变成了排序后的结果。

修正后的代码

只需将列表赋值语句替换为创建副本的写法即可,这里使用列表自带的copy()方法:

def InsSort(myList):
    UBound = len(myList)

    for i in range(1,UBound):
        NextItem = myList[i]
        position = i - 1

        while position>=0 and myList[position]>NextItem:
            myList[position+1] = myList[position]
            position = position - 1
        myList[position+1] = NextItem


UnsortList = []
n = int(input("Enter number of elements in the List:\n"))
for j in range(0,n):
    element = int(input("Input element:\n"))
    UnsortList.append(element)
print(UnsortList)

# 修改为创建列表副本,避免原列表被修改
myList = UnsortList.copy()

InsSort(myList)

print(str(UnsortList)+" is now sorted --> "+str(myList))

其他可选的列表拷贝方式

  • 切片语法创建浅拷贝:
    myList = UnsortList[:]
    
  • 若列表包含嵌套可变对象(如列表套列表),需使用深拷贝:
    import copy
    myList = copy.deepcopy(UnsortList)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:55:30