python中浅拷贝与深拷贝
1.使用深拷贝或浅拷贝时,需要先引入copy
import copy
<1>.不使用copy的方式
# a = [1, 2, 3]
# b=a相当于把a赋值给b,a和b指向的是同一个引用,当a的值发生了改变,b也会随之改变
# b = a
# a[0] = 5
# print(a)
# [5, 2, 3]
# print(b)
# [5, 2, 3]
<2>.浅拷贝copy,一维列表时,浅拷贝可以保证被拷贝的变量的值不会被修改
a = [1, 2, 3, 4]
b = copy.copy(a)
b[2] = 9
print(a)
#[1, 2, 3, 4]
print(b)
#[1, 2, 9, 4]
# 浅拷贝的第二种方式,取出a的值赋值给b
# a = [1, 2, 3, 4]
# b = a[:]
# b[2] = 9
# print(a)
#[1, 2, 3, 4]
# print(b)
#[1, 2, 9, 4]
<3>.深拷贝copy.deepcopy,当列表中有嵌套时,使用浅拷贝,a列表嵌套的列表不会被拷贝,因此当b列表里面列表的值发生了改变,a列表里面的值也会改变
a = [1, 2, [4, 5], 8]
b = copy.copy(a)
b[2][0] = 9
print(a)
#[1, 2, [9, 5], 8]
print(b)
#[1, 2, [9, 5], 8]
为解决这种问题,需要用到深拷贝copy.deepcopy,深拷贝相当于把原来的列表完整的复制了一份
a = [1, 2, [4, 5], 8]
b = copy.deepcopy(a)
b[2][0] = 7
print(a)
#[1, 2, [4, 5], 8]
print(b)
#[1, 2, [7, 5], 8]