深拷贝与浅拷贝

浅拷贝:拷贝了最外围的实体本身,内部的元素只是拷贝了一个引用,也就是说,把实体拷贝一遍,但是该实体中的其他实体不拷贝
深拷贝:外围和内部的实体都会被拷贝,拷贝是实体本身,而不是引用

变量  num = 10
引用  num
不可变实体:一旦创建就不能发生改变,包括数字,字符串,元组
可变实体:可以进行修改的实体,包括列表,字典

​
深浅拷贝的作用:减少内存的使用【以后做数据的清洗,修改或者其他操作的时候,对原数据拷贝一份,以防数据被修改之后,找不到原数据】
​
一、对于不可变实体的深浅拷贝
a = (1,2,3)
1.浅拷贝
1.1浅拷贝:=
print("浅拷贝:=的拷贝")
b = a
print(a)
print(b)
print(id(a))
print(id(b))
​
1.2浅拷贝:copy()
第一步:导入模块  import copy
print("浅拷贝:copy的拷贝")
c = copy.copy(a)
print(a)
print(c)
print(id(a))
print(id(c))
​
2.深拷贝
deepcopy()
d = copy.deepcopy(a)
print(a)
print(d)
print(id(a))
print(id(d))
​
print("**********************")
​
二、可变实体的深浅拷贝
a = [1,2,3]
1.浅拷贝
1.1=
print("浅拷贝:=的拷贝")
b = a
print(a)
print(b)
print(id(a))
print(id(b))
​
1.2copy
print("浅拷贝:copy的拷贝")
c = copy.copy(a)
print(a)
print(c)
print(id(a))
print(id(c))
​
2.深拷贝
deepcopy()
d = copy.deepcopy(a)
print(a)
print(d)
print(id(a))
print(id(d))
​

总结:
a.深浅拷贝都是对原实体的拷贝,区别在于是 实体的拷贝还是引用的拷贝【堆空间还是栈空间】
b.不可变的实体:对于深浅拷贝毫无影响,最终的地址和值都是相等的
c.可变的实体:
    =浅拷贝:值相等,地址相等
    copy浅拷贝:值相等,地址不相等
    deepcopy深拷贝:值相等,地址不相等

 

原文地址:https://www.cnblogs.com/URNOTBENBEN/p/13962846.html