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() |
这是将列表复制到新列表的更好方法。