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]]

 

posted @ 2020-04-18 22:36  和而同  阅读(874)  评论(0编辑  收藏  举报