python 嵌套字典、列表 賦值 出現相同值 問題


錯誤代碼:

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)

結果:

[[1, '1'], [1, '1']]

改正:

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)

結果:

[[1, '1'], [1]]

原因同上


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM