1. 程式人生 > >python筆記:深淺拷貝

python筆記:深淺拷貝

深淺拷貝 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筆記:深淺拷貝