python中的深拷贝和浅拷贝

赋值:操作的是栈内存中的复制

>>> a = 10
>>> b = a
>>> a
10
>>> b
10

浅拷贝:对象是存放在堆内存

>>> ls = [1,2,3]
>>> ls
[1, 2, 3]
>>> ls1 = ls
>>> ls1
[1, 2, 3]
>>> id(ls1)
2409850982976
>>> id(ls)
2409850982976
>>> ls2 = ls.copy()
>>> ls
[1, 2, 3]
>>> ls2
[1, 2, 3]
>>> ls == ls2
True
>>> id(ls)
2409850982976
>>> id(ls2)
2409854617728

python中提供对象的拷贝----copy()

import copy

copy.copy()----浅拷贝

当拷贝后,原被拷贝的数据发生改变,拷贝的数据也会跟着发生改变

深拷贝----copy.deepcopy()

>>> import copy
>>> ls3 = copy.deepcopy(ls)
>>> ls3
[1, 2, 3, 4, 5, ['哈哈哈哈', 1, 2, 3, 4, 5]]
>>> ls
[1, 2, 3, 4, 5, ['哈哈哈哈', 1, 2, 3, 4, 5]]
>>> ls[5].append(6)
>>> ls
[1, 2, 3, 4, 5, ['哈哈哈哈', 1, 2, 3, 4, 5, 6]]
>>> ls3
[1, 2, 3, 4, 5, ['哈哈哈哈', 1, 2, 3, 4, 5]]

总结:一般建议所有浅拷贝(只拷贝一层,效率比较高,占用内存比较少)如果要完整脱离,需要深拷贝

不可变类型,浅拷贝和深拷贝是一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值