【发布时间】:2018-01-03 13:38:19
【问题描述】:
我有许多列表,其中包含许多字典。我只是分配给外部列表中的一个列表中的一个字典。但它会导致分配给外部列表中所有列表中的所有字典。
代码:
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("\n")
func(R)
print(R[0])
print(R[1])
输出:
[{'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].. 上运行),但两个列表都被分配了。
我的索引是否有任何错误?为什么会这样?
【问题讨论】:
-
R[0] 和 R[1] 拥有同一个字典,而不是初始字典的两个单独副本。见lucumr.pocoo.org/2011/7/9/python-and-pola/#pass-by-what-exactly
-
这篇文章可能对您有所帮助:Facts and myths about Python names and values,由 SO 资深人士 Ned Batchelder 撰写。
标签: python list dictionary nested variable-assignment