Python Dict覆盖上一个列表

时间:2019-03-20 08:20:56

标签: python

Temp = {}
Final = {}

OK =['OK','OK']
NOTOK =['NOTOK','NOTOK']

Temp[1] = OK
Final['u1']=Temp

print(Final)

Temp.clear()
Temp[2] = OK
Final['u2']=Temp

print(Final)

Temp.clear()
Temp[3] = NOTOK
Final['u3']=Temp

print(Final)

想知道为什么最后一次打印会覆盖以前的打印,需要帮助。 它与我当前的项目有关,这是我使用的简单术语,即如何使u3 dict(NOTOK)不替换u1和u2内容(确定)。

实际结果

{'u1': {1: ['OK', 'OK']}}
{'u1': {2: ['OK', 'OK']}, 'u2': {2: ['OK', 'OK']}}
{'u1': {3: ['NOTOK', 'NOTOK']}, 'u2': {3: ['NOTOK', 'NOTOK']}, 'u3': {3: ['NOTOK', 'NOTOK']}}

预期结果

{'u1': {1: ['OK', 'OK']}}
{'u1': {2: ['OK', 'OK']}, 'u2': {2: ['OK', 'OK']}}
{'u1': {3: ['OK', 'OK']}, 'u2': {3: ['OK', 'OK']}, 'u3': {3: ['NOTOK', 'NOTOK']}}

1 个答案:

答案 0 :(得分:0)

使用.copy()

Temp = {}
Final = {}

OK =['OK','OK']
NOTOK =['NOTOK','NOTOK']

Temp[1] = OK.copy()
Final['u1']=Temp.copy()

print(Final)

Temp.clear()
Temp[2] = OK.copy()
Final['u2']=Temp.copy()

print(Final)

Temp.clear()
Temp[3] = NOTOK.copy()
Final['u3']=Temp.copy()

print(Final)