程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python中深拷貝與淺拷貝的區別介紹

編輯:Python

首先,我們知道 Python 中有6個標准的數據類型,他們又分為可以變和不可變。
不可變:Number(數字)、String(字符串)、Tuple(元組)。
可以變:List(列表)、Dictionary(字典)、Set(集合)。

淺拷貝

改變原始對象中為可變類型的元素的值,會同時影響拷貝對象。
改變原始對象中為不可變類型的元素的值,不會響拷貝對象。

代碼演示

import copy#定義一個列表,其中第一個元素是可變類型。list1 = [[1,2], 'fei', 66];#進行淺copylist2 = copy.copy(list1);#對象地址是否相同。print(id(list1));print(id(list2));#結果:不同4617781646177936#第一個元素地址是否相同。print(id(list1[0]));print(id(list2[0]));#結果:相同4624043246240432#第二個元素地址是否相同。print(id(list1[1]));print(id(list2[1]));#結果:相同4554732845547328#改變第一個值,查看復制對象變化。list1[0][0] = 2;print(list2);#結果:復制對象發生變化[[2, 2], 'fei', 66]#改變第二個值,查看復制對象變化。list1[1] = 'ge';print(list2);#結果:復制對象沒發生變了[[2, 2], 'fei', 66]深拷貝

深拷貝,除了頂層拷貝,還對子元素也進行了拷貝。
經過深拷貝後,原始對象和拷貝對象所有的可變元素地址都沒有相同的了。

代碼演示

import copy#定義一個列表,其中第一個元素是可變類型。list1 = [[1,2], 'fei', 66];#進行深copylist2 = copy.deepcopy(list1);#對象地址是否相同。print(id(list1));print(id(list2));#結果:不同4617781646177936#第一個元素地址是否相同。print(id(list1[0]));print(id(list2[0]));#結果:不同4912385649588784#第二個元素地址是否相同。print(id(list1[1]));print(id(list2[1]));#結果:相同4554732845547328#改變第一個值,查看復制對象變化。list1[0][0] = 2;print(list2);#結果:復制對象沒發生變了[[1, 2], 'fei', 66]#改變第二個值,查看復制對象變化。list1[1] = 'ge';print(list2);#結果:復制對象沒發生變了[[1, 2], 'fei', 66]

到此這篇關於Python中深拷貝與淺拷貝的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持軟件開發網。



  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved