列表在拷貝過程中需注意的小細節!!!
# 原始列表
person = ['zhao', 'qian', 'sun', [1, 2, 3, 4], 'li']
print(person)
# 賦值
copy1 = person
print(copy1)
import copy
# 淺拷貝
copy2 = person.copy()
print(copy2)
copy3 = copy.copy(person)
print(copy3)
copy4 = person[:] # 全切片
print(copy4)
copy5 = list(person)
print(copy5)
#深拷貝
copy6 = copy.deepcopy(person)
print(copy6)
print('------------修改原始列表----------------')
person [0] = 'laozhao'
person [3][0] = 1234
print('原始修改', person)
print('變數賦值', copy1) # 賦值的是list列表的位址,所以都改變
print('淺拷貝 ', copy2) # 列表裡巢狀的列表跟著變,因為拷貝的是巢狀列表的位址
print('淺拷貝 ', copy3)
print('淺拷貝 ', copy4)
print('淺拷貝 ', copy5)
print('深拷貝 ', copy6) # 拷貝原始列表的值,原始列表改變不影響拷貝後的值
['zhao', 'qian', 'sun', [1, 2, 3, 4], 'li']
['zhao', 'qian', 'sun', [1, 2, 3, 4], 'li']
['zhao', 'qian', 'sun', [1, 2, 3, 4], 'li']
['zhao', 'qian', 'sun', [1, 2, 3, 4], 'li']
['zhao', 'qian', 'sun', [1, 2, 3, 4], 'li']
['zhao', 'qian', 'sun', [1, 2, 3, 4], 'li']
['zhao', 'qian', 'sun', [1, 2, 3, 4], 'li']
------------修改原始列表----------------
原始修改 ['laozhao', 'qian', 'sun', [1234, 2, 3, 4], 'li']
變數賦值 ['laozhao', 'qian', 'sun', [1234, 2, 3, 4], 'li']
淺拷貝 ['zhao', 'qian', 'sun', [1234, 2, 3, 4], 'li']
淺拷貝 ['zhao', 'qian', 'sun', [1234, 2, 3, 4], 'li']
淺拷貝 ['zhao', 'qian', 'sun', [1234, 2, 3, 4], 'li']
淺拷貝 ['zhao', 'qian', 'sun', [1234, 2, 3, 4], 'li']
深拷貝 ['zhao', 'qian', 'sun', [1, 2, 3, 4], 'li']
拷貝之後修改原始列表,不同的拷貝方式有不同的結果,所以在拷貝時,分清是淺拷貝和深拷貝很重要,避免採坑!
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之淺拷貝和深拷貝
python中賦值語句不複製物件,而是在目標和物件之間建立繫結 bindings 關係。python3中有6種標準的資料型別,可分為可變型別和不可變型別。可變型別 list 列表 dictionary 字典 set 集合 不可變型別 number 數字 string 字串 tuple 元組 淺拷貝由...
Python3學習筆記之淺拷貝與深拷貝
直接賦值就相當於物件的引用,例如a b,就是把a指向b指向的那個物件,這個物件發生變化時,a和b對應的值都會發生變化 當使用copy 函式時就是進行了淺拷貝,它拷貝父物件,不會拷貝物件內部的子物件 a b a.copy a,b a 2 5 a,b 可以看到,父物件發生變化時b中不會有相應變化,但子物...