为什么这两个数组相同?

我想要一份列表的副本,然后对其进行排序,但由于 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)

我只需要知道如何将副本存储在内存的另一个引用中,以仅对副本进行排序。谢谢


qq_花开花谢_0
浏览 99回答 1
1回答

拉莫斯之舞

赋值只是创建对象的新别名,它不执行复制。您有两个简单的解决方案:list分配给第二个时浅复制第一个:newArr = arr[:]  # Or arr.copy()将您的副本和排序合并到内置的一个步骤中sorted(创建一个新的list,对其进行排序,然后返回新的list):newArr = sorted(arr)  # No need to call .sort() afterwards旁注:对于比较元素,循环索引相对较慢且不符合Python风格。使用zip和解包到有用的名称会变得更好(而且更快):for old, new in zip(arr, newArr):     if old != new:         swap +=1也就是说,这种计算最小交换的算法几乎肯定是错误的,但这完全是另一个问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python