插入排序代码异常:原列表被意外排序的原因及解决
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
相关产品推荐
相关产品推荐

