面试题系列(五)-- 深拷贝浅拷贝

Python的深拷贝、浅拷贝也是面试经常问的面试题,这里分享一道巩固深浅拷贝的面试题,希望有帮助

import copy

a = [1,2,3,4,5,["a","b","c"]]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)

a.append(100)
a[5].append("d")

print(a)
print(b)
print(c)
print(d)

打印结果:

# a
[1, 2, 3, 4, 5, ['a', 'b', 'c', 'd'], 100]
#b
[1, 2, 3, 4, 5, ['a', 'b', 'c', 'd'], 100]
#c
[1, 2, 3, 4, 5, ['a', 'b', 'c', 'd']]
#d
[1, 2, 3, 4, 5, ['a', 'b', 'c']]

b = a :

是赋值,python中赋值传递的是对象的引用,并没有拷贝对象,a改变后,b也为改变后的值

c = copy.copy( a ):

浅拷贝后的内层列表、字典和原来的是共用的,固

a[5].append("d")后,c里面也有d , 外层append(100)不可变数据类型不受此影响

d = copy.deepcopy( a ) :

深拷贝后的内层列表、字典被复制出来,原来的改变,不影响后面的

不明白的话看下面我用PS画的简图

640?wx_fmt=jpeg

总结几点:

1、复制不可变数据类型,不管copy还是deepcopy,都是同一个地址当浅复制的值是不可变对象(数值,字符串,元组)时和=“赋值”的情况一样,对象的id值与浅复制原来的值相同。

640?wx_fmt=png

2、复制的值是可变对象(列表和字典)

浅拷贝copy有两种情况:

第一种情况:复制的 对象中无 复杂 子对象,原来值的改变并不会影响浅复制的值,同时浅复制的值改变也并不会影响原来的值。原来值的id值与浅复制原来的值不同。

第二种情况:如上述题目所示,复制的对象中有 复杂 子对象 (例如列表中的一个子元素是一个列表), 改变原来的值 中的复杂子对象的值  ,会影响浅复制的值。

深拷贝deepcopy:完全复制独立,包括内层列表和字典

python爬虫人工智能大数据

640?wx_fmt=gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值