深浅拷贝的区别(面试常问)

赋值:会随着原对象的改变而改变

li1 = [1,2,3,4,5]
li2 = li1
print(li1)
print(li2)
li1.append(6)
print(li1,id(li1))
print(li2,id(li2))

#赋值:等于完全共享资源,当其中一个值发生改变时会完全被另一个值共享

1.浅拷贝(数据半共享)

拷贝最外层的对象,内部元素只拷贝了一个引用。在浅拷贝时,会创建一个新的对象,只拷贝第一层的数据,嵌套层会指向原来的内存地址

import copy
li1 = [1,2,[3,4,5]]
li2 = copy.copy(li1)
print(li1)
print(li2)
li1.append(6)
print(li1,id(li1))
print(li2,id(li2))
li1[2].append(7)
print(li1,id(li1[2]))
print(li2,id(li2[2]))

 

 #内存地址不一样,说明不是同一个对象。(注意:外层的内存地址不同,但是内层的内存地址相同)

优点:拷贝速度快,占用空间少,拷贝效率高

2.深拷贝(数据完全不共享)

外层的对象何内部的元素都拷贝一遍

import copy
li1 = [1,2,[3,4,5]]
li2 = copy.deepcopy(li1)
print("li1:",li1,id(li1))
print("li2:",li2,id(li2))
li1[2].append(6)
print("li1:",li1,id(li1[2]))
print("li2:",li2,id(li2[2]))
li1.append(7)
print("li1:",li1,id(li1))
print("li2:",li2,id(li2))

 

# 深拷贝数据变化只影响自己本身,跟原来的对象没有关联

总结:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值