Dictionary inside list assignment results in strange output
本问题已经有最佳答案,请猛点这里访问。
我有很多单子,里面有很多字典。我只需在外部列表中的一个列表中分配一个字典。但它会导致分配给外部列表中所有列表中的所有词典。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | CL=3*[0] DL=4*[0] di= { 'A':[], 'B':[], 'C':CL, 'D':DL } R=[[],[]] R[0].append(di) R[1].append(di) def func(dd): dd[0][0]['A'].append("BANANA") dd[0][0]['B'].append("ELEPHANT") dd[0][0]['C'][0]='BLUE' dd[0][0]['D'][3]='ROCK' dd[0][0]['D'][2]=1111 print(R[0]) print(R[1]) print(" ") func(R) print(R[0]) print(R[1]) |
输出:
1 2 3 4 5 6 | [{'A': [], 'C': [0, 0, 0], 'B': [], 'D': [0, 0, 0, 0]}] [{'A': [], 'C': [0, 0, 0], 'B': [], 'D': [0, 0, 0, 0]}] [{'A': ['BANANA'], 'C': ['BLUE', 0, 0], 'B': ['ELEPHANT'], 'D': [0, 0, 1111, 'ROCK']}] [{'A': ['BANANA'], 'C': ['BLUE', 0, 0], 'B': ['ELEPHANT'], 'D': [0, 0, 1111, 'ROCK']}] |
号
如您所见,尽管我为外部列表中第一个列表中的字典分配了值(func()只在dd[0]上操作),但两个列表都被分配了。
我的索引有什么错误吗?为什么会这样?
1 2 3 4 5 6 7 8 9 | di= { 'A':[], 'B':[], 'C':CL, 'D':DL } R=[[],[]] R[0].append(di) R[1].append(di) |
号
要修复代码:
1 2 3 | from copy import deepcopy R[0].append(deepcopy(di)) R[1].append(deepcopy(di)) |
代码
1 2 | R[0].append(di) R[1].append(di) |
通过引用将