Python3 列表的淺拷貝 與 深拷貝

2021-08-22 10:08:45 字數 1758 閱讀 6525

列表在拷貝過程中需注意的小細節!!!

# 原始列表

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中不會有相應變化,但子物...