我正在嘗試使用 for 回圈僅更改串列中三個相同字典中的一個,以準確切出串列中的第二個字典。但不知何故,我串列中所有 3 個字典的值都發生了變化,就好像我沒有正確切片一樣。我錯過了什么?
代碼:
p1 = {
'fn': 'kan',
'ln': 'go',
'icolor': 'brown',
'age': 3.5,
'location': 'CA',
}
p_list = []
for i in range(0,3):
p_list.append(p1)
for p_info in p_list[1:2]:
if p_info['fn'] == 'kan':
p_info['fn'] = 'ad'
p_info['ln'] = 'se'
p_info['icolor'] = 'brown'
p_info['age'] = 30
p_info['location'] = 'CN'
print(p_list)
實際輸出:
[{'fn': 'ad', 'ln': 'se', 'icolor': 'brown', 'age': 30, 'location': 'CN'}, {'fn': 'ad', 'ln': 'se', 'icolor': 'brown', 'age': 30, 'location': 'CN'}, {'fn': 'ad', 'ln': 'se', 'icolor': 'brown', 'age': 30, 'location': 'CN'}]
預期輸出:
[{'fn': 'kan', 'ln': 'go', 'icolor': 'brown', 'age': 3.5, 'location': 'CA'}, {'fn': 'ad', 'ln': 'se', 'icolor': 'brown', 'age': 30, 'location': 'CN'}, {'fn': 'kan', 'ln': 'go', 'icolor': 'brown', 'age': 3.5, 'location': 'CA'}]
uj5u.com熱心網友回復:
這是因為串列的所有三個元素都是相同的參考物件。對一個字典所做的任何更改都會更改所有三個字典中的元素。例子:
如果有字典:
a={'x':1,'y'=2}
并且有一個變數 b 具有 a 的精確值:b=a
在 a 中所做的任何更改也會影響 b,反之亦然。但是如果你想讓它們保持獨立,我們需要通過copy()
方法創建它的副本。如果您鍵入:
b=a.copy()
現在所做的任何更改都不會影響另一個。您的代碼也是如此。我們需要為您的字典創建三個副本,您可以通過以下命令來完成:
p_list = [p1.copy() for i in range(3)]
所以你的新代碼是:
p1 = {
'fn': 'kan',
'ln': 'go',
'icolor': 'brown',
'age': 3.5,
'location': 'CA',
}
p_list = [p1.copy() for i in range(3)]
for p_info in p_list[1:2]:
if p_info['fn'] == 'kan':
p_info['fn'] = 'ad'
p_info['ln'] = 'se'
p_info['icolor'] = 'brown'
p_info['age'] = 30
p_info['location'] = 'CN'
print(p_list)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/479549.html
上一篇:遞回獲取嵌套串列的所有元素
下一篇:從參考串列中過濾一個范圍內的元組