本文章主要对深拷贝和浅拷贝进行说明
举例: s1 = [1,1,2,3,4,5,6,8] for i in lists: if i%2 != 0: lists.remove(i) print(lists)#结果为[1,2,4,6,8] 以上例子说循环删除list里面的数据的时候,结果会不正确 将上面的代码该为如下: s1 = [1,1,2,3,4,5,6,8] s2 = [1,1,2,3,4,5,6,8]#s1和s2内存地址不同,如果此处改为S2 = S1 则循环结果也不正确,因为S2 = S1只是拷贝了内存地址,两个列表的内存地址相同指的都是同一个数据 for i in s2: if i%2 != 0: s1.remove(i) print(s1)#结果为[2,4,6,8]
#print(id(s1))
#print(id(s2))#用id()方法可查看列表的内存地址
原因: 循环删除时下标从0开始,第二次循环时下标为1,第一次循环后列表值为[1,2,3,4,5,6,8] 下标从1开始取值取到了2,并不是1,所以循环删除list里面的数据时,结果会不正确; 修改后代码中循环列表s2删除列表s1就没问题
二、深拷贝、浅拷贝
1、深拷贝:会重新开辟一块内存
import copy#深拷贝需要引入copy模块 s2.deepcopy(s1)#如例子中的s2 = [1,2,3,4,5,6,8]
2、浅拷贝:存的是同一块内存地址
s2 = s1