2017-10-28 69 views
1

對於args= ['', '0', 'P1', 'with', '10']students=[['1', '2', '3', 6]]它打印:Python的list.append變化的元素之後

[[['1', '2', '3', 6]]] 
[[['10', '2', '3', 6]]] 

預期產量爲:

[[['1', '2', '3', 6]]] 
[[['1', '2', '3', 6]]] 

但它在某種程度上改變了backup_list任何快速解決方案?

backup_list.append(students[:]) 
print(backup_list) 
students[int(args[1])][0] = args[4] 
print(backup_list) 

回答

1

[:]做出淺拷貝。你需要一個深層副本:

import copy 

backup_list.append(copy.deepcopy(students)) 

全部程序:

import copy 

backup_list = [] 
args= ['', '0', 'P1', 'with', '10'] 
students=[['1', '2', '3', 6]] 
backup_list.append(copy.deepcopy(students)) 
print(backup_list) 
students[int(args[1])][0] = args[4]  
print(backup_list) 

輸出:

[[['1', '2', '3', 6]]] 
[[['1', '2', '3', 6]]] 

documentation解釋淺和深拷貝之間的區別:

一淺拷貝構造一個新的複合對象然後 (儘可能)將引用插入到原來的 中找到的對象中。

深拷貝構造一個新的複合對象,然後遞歸地將 拷貝插入原始對象中。

+0

非常感謝它,但是您能否更深入地解釋它爲什麼會這樣做以及它爲什麼不具有淺拷貝:3? – Skillwalker

相關問題