# 深拷贝和浅拷贝的区别
import copy
# 浅拷贝
list_1 = [1, 2, 3, 4]
list_2 = list_1 # 浅拷贝,只是将列表的应用复制给了list_2
list_2[1] = "b" # 当通过list_2修改列表的元素时候,实际上是修改了list_1和list_2同时指向的列表
print(list_1) # 输出 [1, 'b', 3, 4]
print(list_2) # 输出 [1, 'b', 3, 4]
list_1[0] = 'a'
print(list_1) # 输出 ['a', 'b', 3, 4]
print(list_2) # 输出 ['a', 'b', 3, 4]
# 深拷贝
list_3 = [5, 6, 7, 8]
list_4 = copy.deepcopy(list_3) # 给list_4重新申请一块内存,存放[5,6,7,8],和list_3不在同一块内存中
list_4[1] = 'b'
print(list_3) # 输出 [5, 6, 7, 8]
print(list_4) # 输出 [5, 'b', 7, 8]
list_3[0] = 'a'
print(list_3) # 输出 ['a', 6, 7, 8]
print(list_4) # 输出 [5, 'b', 7, 8]
补充
import copy
a = [1,2,3,4,['a','b']]
b = a # 赋值
c = a[:] # 浅拷贝
d = copy.copy(a) # 浅拷贝
e = copy.deepcopy(a) # 深拷贝
a.append(5)
a[4].append('c')
print('a=',a)
print('b=',b)
print('c=',c)
print('d=',d)
print('e=',e)
输出:
a= [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b= [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c= [1, 2, 3, 4, ['a', 'b', 'c']]
d= [1, 2, 3, 4, ['a', 'b', 'c']]
e= [1, 2, 3, 4, ['a', 'b']]