【发布时间】:2020-09-17 14:20:08
【问题描述】:
我想要一份我的列表的副本,然后对其进行排序,但由于 python 的工作方式,如果我对列表的副本进行排序,它也会对原始列表进行排序。这是我的代码:
def swapBySoting(arr):
newArr = arr
newArr.sort()
swap = 0
for i in range(len(arr)):
if arr[i] != newArr[i]:
swap +=1
return int(swap / 2)
我只需要知道如何将副本存储在另一个内存引用中,仅对副本进行排序。谢谢
【问题讨论】:
-
简短的回答是
newArr和arr仍然指向内存中的同一件事。因此,当您对一个进行排序时,您对两个都进行了排序。这是一个常见的绊脚石,但有很多关于它的文档。 -
这能回答你的问题吗? List changes unexpectedly after assignment. How do I clone or copy it to prevent this? 如上所述,
newArr = arr不会复制。如果需要副本,则需要显式复制列表。 -
假设您按照 Carcigenicate 的链接修复了“两个数组都已排序”错误,那么您的函数当前计算错位项目的数量,除以 2。您如何确定该数字等于对数组进行排序所需的最小数量或交换?
-
请edit 这个问题有一个描述性的标题,可能类似于“为什么这两个数组相同?” "Can someone help me" is not a real question.