python笔记:深浅拷贝

#浅拷贝

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方法

猜你喜欢

转载自www.cnblogs.com/BarryWen/p/9190480.html