浅拷贝
1.copy函数是浅拷贝,只对可变类型的第一层对象进行拷贝,对拷贝的对象开辟新的内存空间进行存储,不会拷贝对象内部的子对象.
2.不可变类型的浅拷贝示例代码:
不可变类型有:数字,字符串,元组
import copy
a1=122
b1=copy.copy(a1)
print(id(a1))
print(id(b1))
a2=‘ac’
b2=copy.copy(a2)
print(id(a2))
print(id(b2))
输出id地址相同.
不可变类型的浅拷贝说明:
不可变类型进行浅拷贝不会给拷贝的对象开辟新的内存空间,只是拷贝了这个对象的引用.
3.可变类型的浅拷贝示例:
可变类型有:列表,字典,集合
a1=[1,2]
b1=copy.copy(a1)
print(id(a1))
print(id(b1))
输出id地址不同.
可变类型浅拷贝说明:
可变类型进行浅拷贝只对可变类型的第一层对象进行拷贝,对拷贝对象会开辟新的内存空间进行存储,子对象不进行拷贝.
深拷贝
1.deepcopy函数的深拷贝,只要发现对象有可变类型就会对该对象到最后一个可变类型的每一层对象进行拷贝,对每一层拷贝的对象都会开辟新的内存空间进行存储.
2.不可变类型的深拷贝示例代码:
不可变类型有数字,字符串,元组
import copy
a1=1
b1=copy.deepcopy(a1)
print(id(a1))
print(id(b1))
输出id地址相同
不可变类型的深拷贝说明:
不可变类型进行深拷贝,如果子对象没有可变类型,则不会进行拷贝,只是拷贝了对象的引用,否则会对该对象每一层进行拷贝,对每一层拷贝对象都会开辟新的内存空间进行存储.
3.a2=(1,[‘2’])
b2=copy.deepcopy(a2)
print(id(a2)
print(id(b2))
输出id地址不同
可变类型的深拷贝说明:
对每一次进行拷贝,对每一个拷贝的对象都会开辟新的内存空间进行存储.
深拷贝和浅拷贝的区别
浅拷贝最多拷贝对象的一层
copy.copy()
深拷贝可能拷贝对象的多层
copy.deepcopy()