[英]Python managing multiple dictionaries
我正在使用Python(3.6,但也在Python 2.11中進行了測試-行為相同)和字典進行一些非常基本的操作。 這是代碼示例:
max_values = dict()
min_values = dict()
initial_values = {"stat": 2, "value": 5.5}
max_values["zzz"] = initial_values
min_values["zzz"] = initial_values
到目前為止,當我打印這些字典時:
for key, value in max_values.items():
print("[%s] Key [%s] -> Value [%s]" % ("max_values", key, value))
for key, value in min_values.items():
print("[%s] Key [%s] -> Value [%s]" % ("min_values", key, value))
我得到了預期的結果:
[max_values] Key [zzz] -> Value [{'stat': 2, 'value': 5.5}]
[min_values] Key [zzz] -> Value [{'stat': 2, 'value': 5.5}]
但是,如果我嘗試使用這些值進行修改,例如:
min_values["zzz"]["value"] = 1.0
並再次執行相同的打印,我得到:
[max_values] Key [zzz] -> Value [{'stat': 2, 'value': 1.0}]
[min_values] Key [zzz] -> Value [{'stat': 2, 'value': 1.0}]
問題是:為什么max_values
詞典發生了變化? 我只修改min_values
,但對於這個新的密鑰分配min_value
字典還修改max_values
。 難道我做錯了什么?
這是因為max_values和min_values鏈接在一起。 也就是說,它們都引用了initial_values。 因此,如果您更改一個,您也會更改另一個。 一種解決方案是使用Deepcopy。
您只有一個dict initial_values
並且您的兩個dict都引用相同的dict initial_values
。 您必須復制此字典才能獲得另一個字典。
嘗試:
max_values["zzz"] = initial_values
min_values["zzz"] = dict(initial_values)
要么:
max_values["zzz"] = initial_values
min_values["zzz"] = initial_values.copy()
現在這個結構:
min_values["zzz"]["value"] = 1.0
for key, value in max_values.items():
print("[%s] Key [%s] -> Value [%s]" % ("max_values", key, value))
for key, value in min_values.items():
print("[%s] Key [%s] -> Value [%s]" % ("min_values", key, value))
獲得預期的結果:
[max_values] Key [zzz] -> Value [{'stat': 2, 'value': 5.5}]
[min_values] Key [zzz] -> Value [{'stat': 2, 'value': 1.0}]
因為您給了兩個值相同的字典,所以只需查看代碼的前兩行即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.