copy()方法
阿新 • • 發佈:2018-12-29
copy()方法
描述
字典 copy() 方法返回一個字典的淺拷貝(父不變,子變)。
語法
copy() 方法語法:
D.copy()
引數
- 無。
返回值
返回一個字典的淺拷貝(父不變,子變)。
例項
D1 = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'} D2 = D1.copy() print ("新複製的字典為 : ",D2)
以上例項輸出結果為:
新複製的字典為 : {'Age': 7, 'Name': 'Runoob', 'Class': 'First'}
直接引用、淺拷貝、深拷貝的區別
可以通過以下例項說明:
import copy D1 = {'user': 'runoob', 'num': [1, 2, 3]} # 原始資料 D2 = D1 # 直接引用:D2和D1整體指向同一物件。 D3 = D1.copy() # 淺拷貝:D3和D1的父物件是一個獨立的物件,但是他們的子物件還是指向同一物件。 D4 = copy.deepcopy(D1) # 深拷貝:D4和D1的整體是一個獨立的物件。 D1['user'] = 'root' # 修改父物件D1 D1['num'].remove(1) # 修改父物件D1中的[1, 2, 3]列表子物件print('原始資料:',{'user': 'runoob', 'num': [1, 2, 3]}) # 原始資料 print('改後資料:',D1) # 父子都修改過的 print('直接引用:',D2) # 父子都變(直接引用) print('淺拷貝:',D3) # 父不變,子變(淺拷貝) print('深拷貝:',D4) # 父子都不變(深拷貝)
例項中 D2 其實是 D1 的賦值引用(別名),所以輸出結果都是一致的;D3 是對D1的淺拷貝,父物件不會隨D1修改而修改,子物件隨D1的修改而修改;D4 是對D1的深拷貝,父物件和子物件都不會隨D1修改而修改。
輸出結果如下:
原始資料: {'user': 'runoob', 'num': [1, 2, 3]} 改後資料: {'user': 'root', 'num': [2, 3]} 賦值引用: {'user': 'root', 'num': [2, 3]} 淺拷貝: {'user': 'runoob', 'num': [2, 3]} 深拷貝: {'user': 'runoob', 'num': [1, 2, 3]}