python筆記:深淺拷貝
阿新 • • 發佈:2018-06-16
深淺拷貝 port 指針 pre 淺拷貝 In 獨立 imp col
#淺拷貝
s = [‘1‘, ‘test‘, 2, {1: ‘wen‘}, [1, 3]]
s2 = s.copy() #拷貝 copy()
print(s)
print(s2)
s2[2] = 5 #對s2 重新賦值不會影響到s, 因為重新開辟了一塊內存空間給s2賦值,指向了另一塊地址
print(s)
print(s2)
s3 = s.copy()
print(s3)
s3[4][1] = 5 #修改s3
print(s) #影響到了s
print(s3) #說明了s和s3之間是有聯系的,並不是獨立的內存,因為修改的部分是同一個一個指針
s4 = s.copy()
s4[3][1] = 10 #對s4賦值也改變了s
print(s) #因為修改的部分為字典,修改的部分的指向為字典的地址
print(s4)
#運行結果:
[‘1‘, ‘test‘, 2, {1: ‘wen‘}, [1, 3]]
[‘1‘, ‘test‘, 2, {1: ‘wen‘}, [1, 3]]
[‘1‘, ‘test‘, 2, {1: ‘wen‘}, [1, 3]]
[‘1‘, ‘test‘, 5, {1: ‘wen‘}, [1, 3]]
[‘1‘, ‘test‘, 2, {1: ‘wen‘}, [1, 3]]
[‘1‘, ‘test‘, 2, {1: ‘wen‘}, [1, 5]]
[‘1‘, ‘test‘, 2, {1: ‘wen‘}, [1, 5]]
[‘1‘, ‘test‘, 2, {1: 10}, [1, 5]]
[‘1‘, ‘test‘, 2, {1: 10}, [1, 5]]
#從以上的結果可以看出來,淺拷貝只會拷貝第一層的指向
#淺拷貝在實際使用過程中使用的非常少
import copy
s6 = copy.copy(s) #就等於淺拷貝
#深拷貝
s5 = copy.deepcopy(s) #深拷貝
print(s5)
print(s)
s5[3][1] = 15 #深拷貝就是全部拷貝,所有的指向都全部拷貝一份
print(s)
print(s5)
#運行結果:
[‘1‘, ‘test‘, 2, {1: 10}, [1, 5]]
[‘1‘, ‘test‘, 2, {1: 10}, [1, 5]]
[‘1‘, ‘test‘, 2, {1: 10}, [1, 5]]
[‘1‘, ‘test‘, 2, {1: 15}, [1, 5]]
#深拷貝的格式就是先要import copy
#再調用copy的deepcopy方法
python筆記:深淺拷貝