錯誤代碼:
import copy
lists={}
test=['s1','s2','s3']
data = {'value': '',}
for i in range(2):
lists[i] = data
for j in range(2):
lists[j]['value']=test[j]
print(lists)
結果:
Connected to pydev debugger (build 182.5107.22)
{0: {'value': 's2'}, 1: {'value': 's2'}}
改正后代碼
import copy
lists={}
test=['s1','s2','s3']
data = {'value': '',}
for i in range(2):
lists[i] = copy.deepcopy(data)
for j in range(2):
lists[j]['value']=test[j]
print(lists)
結果:
Connected to pydev debugger (build 182.5107.22)
{0: {'value': 's1'}, 1: {'value': 's2'}}
原因:
lists[i] = data 在執行 賦值時, 每一次調用的都是 data變量的源地址,並沒有改變地址。
所以我們在下面動態的改變值的時候,就會出現改變一個值,所有結果全部改變。
類似於python的淺拷貝和深拷貝。 所以只需要將其變為深拷貝即可。copy.deepcopy().
補充:
# 這個是嵌套列表 也會出現相同問題
import copy
lists=[]
test=['s1','s2','s3']
data = [1]
for i in range(2):
lists.append(data)
lists[0].append('1')
print(lists)
結果:
改正:
import copy
lists=[]
test=['s1','s2','s3']
data = [1]
for i in range(2):
lists.append(copy.deepcopy(data))
lists[0].append('1')
print(lists)
結果:
原因同上