关于字典:python更新全局字典里面的递归函数

python updating global dict inside recursive function

我试图在一个列表中找到元素的所有排列,并将其添加到一个全局字典中。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
outp={}
k=0
def func(i,arr):
    global outp
    global k
    arr=arr.copy()
    for j in range(i,len(list)):
        arr[i],arr[j] = arr[j],arr[i]
        if i!=j or i==0:
            k=k+1
            print("

"
,arr,k)
            outp[k]=arr
            print("
"
,outp)
        func(i+1,arr)

list = [1,2,3,8]
func(0,list)

输出如下:直到第四个元素正确更新。在第5个元素中,它更新了字典中的第5个和第3个元素。我不知道为什么会这样。善意的帮助

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[1, 2, 3, 8] 1

 {1: [1, 2, 3, 8]}


 [1, 2, 8, 3] 2

 {1: [1, 2, 3, 8], 2: [1, 2, 8, 3]}


 [1, 3, 2, 8] 3

 {1: [1, 2, 3, 8], 2: [1, 2, 8, 3], 3: [1, 3, 2, 8]}


 [1, 3, 8, 2] 4

 {1: [1, 2, 3, 8], 2: [1, 2, 8, 3], 3: [1, 3, 2, 8], 4: [1, 3, 8, 2]}


 [1, 8, 2, 3] 5

 {1: [1, 2, 3, 8], 2: [1, 2, 8, 3], 3: [1, 8, 2, 3], 4: [1, 3, 8, 2], 5: [1, 8, 2, 3]}


您需要在字典中放置数组的副本:

1
outp[k] = arr.copy()


这是将列表复制到新列表的更好方法。arr=arr[:]。https://repl.it/repls/bronzeyellowconversion