首先,我們知道Python3中,有6個標準的資料型別,他們又分為可以變和不可變,
- 不可變:Number(數字)、String(字串)、Tuple(元組),
- 可以變:List(串列)、Dictionary(字典)、Set(集合),
一.淺拷貝
a 和 b 是一個獨立的物件,但他們的子物件還是指向統一物件(是參考)
淺拷貝后,改變原始物件中為可變型別的元素的值,會同時影響拷貝物件;改變原始物件中為不可變型別的元素的值,不會響拷貝物件,
#定義一個串列,第一個元素是可變型別>>> A = [[1,2],'fei',90]#淺拷貝
>>> B = copy.copy(A)#物件地址是否相同
>>> A is B
False#第一個元素地址是否相同
>>> A[0] is B[0]
True#第二個元素地址是否相同
>>> A[1] is B[1]
True#改變第一個可變型別的值,查看復制物件變化
>>> A[0][0] = 2
>>> A
[[2, 2], 'fei', 90]#復制物件也跟著改變了
>>> B
[[2, 2], 'fei', 90]#改變第二個不可變型別的值,查看復制物件變化
>>> A[1] = 'anne'
>>> A
[[2, 2], 'anne', 90]#復制物件沒有改變
>>> B
[[2, 2], 'fei', 90]
二.深拷貝
a 和 b 完全拷貝了父物件及其子物件,兩者是完全獨立的,
深拷貝,除了頂層拷貝,還對子元素也進行了拷貝,
經過深拷貝后,原始物件和拷貝物件所有的可變元素地址都沒有相同的了,
#深拷貝>>> C = copy.deepcopy(A)#物件地址是否相同
>>> A is C
False#第一個元素地址是否相同
>>> A[0] is C[0]
False#第二個元素地址是否相同
>>> A[1] is C[1]
True#改變第一個元素,查看復制元素變化
>>> A[0][0] = 2
>>> A
[[2, 2], 'fei', 90]#復制元素不變,對復制元素沒影響
>>> C
[[1, 2], 'fei', 90]
#改變第二個元素,查看復制元素變化
>>> A[1] = 'Anne' >>> A[[2, 2], 'Anne', 90]
#復制元素不變,對復制元素沒影響
>>> C[[1, 2], 'fei', 90]
在這里看到一個讓我困惑的問題,A is B
三.賦值參考
a 和 b 都指向同一個物件
#學習中遇到問題沒人解答?小編創建了一個Python學習交流群:531509025
#尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書!
#賦值參考
>>> A = [[1,2],'fei',90]
>>> D = A
#物件地址是否相同
>>> A is D
True
#第一個元素地址是否相同
>>> A[0] is D[0]
True
#第二個元素地址是否相同
>>> A[1] is D[1]
True
#改變A中第一個元素,查看是否影響D
>>> A[0][0] = 2
>>> A
[[2, 2], 'fei', 90]
#D中第一個元素也跟著改變
>>> D
[[2, 2], 'fei', 90]
#改變D中第二個元素,查看是否影響A
>>> D[1] = 'anne'
#A中第二個元素也改變了
>>> A
[[2, 2], 'anne', 90]
>>> D
[[2, 2], 'anne', 90]
>>>

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/298242.html
標籤:Python
