#浅拷贝
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方法
原文:https://www.cnblogs.com/BarryWen/p/9190480.html