copy函数
python中赋值是复制对象,而是在目标和对象之间创建绑定关系,当对应对象是可变类型时,有时需要生成其副本进行修改,避免改变原对象,这就涉及到copy类中深拷贝和浅拷贝
python赋值有3种
#直接赋值 a = [1,2,3,4,5,6] b = a #list类型赋值操作就是传地址 b[3] = 300 print(a) #[1, 2, 3, 300, 5, 6] 值被改变 print(b) #[1, 2, 3, 300, 5, 6] #浅拷贝 a = [1,2,3,4,5,6] b = copy.copy(a) #浅拷贝,a传值过去,b另辟一个内存空间 b[3] = 300 print(a) #[1, 2, 3, 4, 5, 6] 值没有被改变 print(b) #[1, 2, 300, 4, 5, 6] print(id(a)) print(id(b)) #a和b不是同一个内存空间 #深拷贝和浅拷贝区别 #数据对象有多层嵌套时,浅拷贝只拷贝一层 #数据对象有多层嵌套时,深拷贝子对象也进行拷贝 a = [1,2,3,[4,5,6]] b = copy.copy(a) print(id(a)) # a b 内存不一样 print(id(b)) print(id(a[3])) #a[3] b[3]内存值一样 print(id(b[3])) b[3][2] = 200 print(a) #[1, 2, 3, [4, 5, 200]] a[3][2] 值被改变 print(b) #[1, 2, 3, [4, 5, 200]] a = [1,2,3,[4,5,6]] b = copy.deepcopy(a) print(id(a)) # a b 内存不一样 print(id(b)) print(id(a[3])) #a[3] b[3]内存值不一样 print(id(b[3])) b[3][2] = 200 print(a) #[1, 2, 3, [4, 5, 6]] a[3][2] 值没被改变 print(b) #[1, 2, 3, [4, 5, 200]]