Python 为什么我的名单';s值在我的代码的某些部分中没有更改?

Python 为什么我的名单';s值在我的代码的某些部分中没有更改?,python,list,pass-by-reference,Python,List,Pass By Reference,我在做一些Hackerrank练习,遇到了交换元素的问题。我的问题是关于列表的,为什么“arr”中的元素在第二个for循环中不会像在第一个for循环中一样发生变化 def minimumSwaps(arr): arr = [i-1 for i in arr] ls = [] minimumSwaps = 0 for i, j in enumerate(arr): print(arr) if j == arr[j]:

我在做一些Hackerrank练习,遇到了交换元素的问题。我的问题是关于列表的,为什么“arr”中的元素在第二个for循环中不会像在第一个for循环中一样发生变化

def minimumSwaps(arr):
    arr = [i-1 for i in arr]
    ls = []

    minimumSwaps = 0
    for i, j in enumerate(arr):
        print(arr)
        if j == arr[j]:
            continue
        else:
            test = arr[i]
            arr[i] = arr[j]
            arr[j] = test
            minimumSwaps += 1
            ls.append(arr[i])
    print('\n\n')
    for i in range(len(ls)):
        print(arr)
        if i == arr[i]:
            continue
        else:
            test = arr[i]
            arr[i] = arr[arr[i]]
            arr[arr[i]] = test
            minimumSwaps +=1


    return minimumSwaps

minimumSwaps([4,3,1,2])
第一个循环的输出为:

[3,2,0,1]

[1,2,0,3]

[1,0,2,3]

[1,0,2,3]

这正是我所期望的,但第二个循环输出给了我:

[1,0,2,3]


[1,0,2,3]在
i==0
迭代中,
test=arr[i]
将1分配给
test

arr[i]=arr[arr[i]
将0分配给
arr[0]

arr[arr[i]]=test
将1分配回
arr[0]
,而不是
arr[1]
,因为此时
arr[0]
是0,而不是1


最终结果:没有任何变化。

为什么在对列表执行任何操作之前而不是之后打印?@user2357112这只是出于测试目的,不会产生任何影响。在第二个for循环的第一次迭代之后,无论如何它都应该更改列表,但是没有。