python 无拷贝,浅拷贝,深拷贝的区别

核心要义:python一切皆对象。

无拷贝:

a=[1,2,3]
b=a
b.append(1)
print(a)

这里,a相当于一个指向列表[1,2,3]的指针。b=a,相当于b和a指向了同一个对象 [1,2,3]

b.append(1),相当于对b指向的对象[1,2,3]操作,使得其指向的对象变为[1,2,3,1]

而a和b指向的是同一个对象,所以print(a) 的结果是[1,2,3,1]

浅拷贝:

python中浅拷贝需要用到copy()函数。

a=[1,2,[9,9],3]
b=a.copy()
b.append(1)
print('a的值为:' ,a)
#a的值为: [1, 2, [9, 9], 3]
b[2].append('aaa')
print('a的值为:' ,a)
#a的值为: [1, 2, [9, 9, 'aaa'], 3]
    

从上面代码可以看到,b.append(1)之后,a的值没有改变,但是对b的对象的子对象使用append时,a就会改变。

深拷贝:

深拷贝需要用python中copy库中的deepcopy()函数。

import copy
a=[1,2,[9,9],3]
b=copy.deepcopy(a)
b.append(1)
print('a的值为:' ,a)
#a的值为: [1, 2, [9, 9], 3]
b[2].append('aaa')
print('a的值为:' ,a)
#a的值为: [1, 2, [9, 9], 3]


从上面的输出看,其实,深拷贝就是将其对象和其子对象都完全给与了一个新的内存,使得b指向的是新开辟的内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值