由於python使用了物件引用,因此在使用賦值操作符(=)時,並沒有進行賦值操作。如果右邊的運算元是字面值,比如字串或數字,那麼左邊的運算元被設定為乙個物件引用,該物件引用將指向存放字面值的記憶體物件。如果右邊的運算元是乙個物件引用,那麼左邊的運算元將設定為乙個物件引用,並與右邊的運算元指向相同的物件。
如果需要組合型別資料(或其他可變物件)的乙個單獨副本。對於序列,在提取資料片時,資料片總是取自某個資料項的乙個單獨副本。
對於字典與集合而言,這種複製操作可以使用dict.copy()與set.copy()來實現。此外,copy模組提供了copy.copy()函式,該函式返回給定物件的乙個副本。對內建組合資料型別進行複製的另一種方法是使用型別名作為函式,將待複製的組合型別資料作為引數。
這些複製技術都是淺拷貝,複製的只是物件引用,而非物件本身。對固定資料型別,比如數字與字串,這與賦值的效果是相同的。但是對於可變的資料型別,比如巢狀的組合型別,這意味著相關物件同時被原來的組合與複製得來的組合應用。
Python3之淺拷貝和深拷貝
python中賦值語句不複製物件,而是在目標和物件之間建立繫結 bindings 關係。python3中有6種標準的資料型別,可分為可變型別和不可變型別。可變型別 list 列表 dictionary 字典 set 集合 不可變型別 number 數字 string 字串 tuple 元組 淺拷貝由...
Python3的深拷貝和淺拷貝
a 1 b a a 2 print a,b print id a id b 執行結果 2 11445293568 1445293536 列表直接復賦值給列表不屬於拷貝,只是記憶體位址的引用 list1 a b c list2 list1 print list1,list2 print id list...
Python3學習筆記之淺拷貝與深拷貝
直接賦值就相當於物件的引用,例如a b,就是把a指向b指向的那個物件,這個物件發生變化時,a和b對應的值都會發生變化 當使用copy 函式時就是進行了淺拷貝,它拷貝父物件,不會拷貝物件內部的子物件 a b a.copy a,b a 2 5 a,b 可以看到,父物件發生變化時b中不會有相應變化,但子物...