深拷贝和浅拷贝

浅拷贝

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值