**1、浅拷贝--使用等号进行赋值**
直接使用等号进行赋值,是浅拷贝,两个list的地址一样
lis1 = [1,2,3] lis1存的是lis1的内存地址,并不是[1,2,3]
lis2=lis1 lis2=lis1时,lis2也就是等于lis1的内存地址,所以说操作lis1时,lis2中的值也会发生变化
lis1.append(4)
print('lis1',id(lis1),lis1)
print('lis2',id(lis2),lis2)
2、浅拷贝–使用切片进行赋值
lis1 = [1,2,3]
lis2=lis1[:]
lis3=[5,6]
lis1.append(4)
lis1.append(lis3)
print('lis1',id(lis1),lis1)
print('lis2',id(lis2),lis2)
3、浅拷贝–使用list自带的copy函数
虽然lis1和lis2的地址不一样,但是这种方式也是浅拷贝
copy后的内容地址不一样时,不一定就是深拷贝,如果地址不变的话,一定是浅拷贝
通过list.copy复制过来的内容,删除的时候,可以同步到lis2,但是如果lis1中包含字典时,对lis1中的value进行修改的时候,也会同步到lis2,list.copy表层是深拷贝,往深了看,还是浅拷贝
lis1 = [1,2,3]
lis2=lis1.copy()
lis3=[5,6]
lis1.append(4)
lis1.append(lis3)
print('lis1',id(lis1),lis1)
print('lis2',id(lis2),lis2)
4、浅拷贝–使用copy.copy
import copy
lis1 = [1,2,3]
lis2 = copy.copy(lis1)
print(‘lis1’,id(lis1),lis1)
print(‘lis2’,id(lis2),lis2)
5、深拷贝–使用copy中的deepcopy()
python的深拷贝只有copy.deepcopy,其他的都是浅拷贝
import copy
lis1 = [1,2,3]
lis2=copy.deepcopy(lis1)
lis3=[5,6]
lis1.append(4)
lis1.append(lis3)
print('lis1',id(lis1),lis1)
print('lis2',id(lis2),lis2)