Python基础--深浅拷贝

python中的copy

一、变量传递

l1 = [1,2,3]
l2 = l1
l1.append('a')
print(l1,id(l1))
print(l2,id(l2))

[1, 2, 3, 'a'] 139798038887048
[1, 2, 3, 'a'] 139798038887048

二、变量赋值传递

1) 传递前改变子级

l1 = [1,[2],3,4,5]
l2 = l1[:]
l1.append('b')

print(l1,id(l1))
print(l2,id(l2))
[1, [2], 3, 4, 5, 'b'] 140272967163528
[1, [2], 3, 4, 5] 140272967163016

2) 传递后改变子级

l1 = [1,[2],3,4,5]
l2 = l1[:]
l2.append('b')

print(l1,id(l1))
print(l2,id(l2))

[1, [2], 3, 4, 5] 140640091668104
[1, [2], 3, 4, 5, 'b'] 140640091667592

3) 传递前改变孙子级

l1 = [1,[2],3,4,5]
l2 = l1[:]
l1[1].append('a')

print(l1,id(l1))
print(l2,id(l2))

[1, [2, 'a'], 3, 4, 5] 139656870055560
[1, [2, 'a'], 3, 4, 5] 139656870055048

4) 传递后改变孙子级

l1 = [1,[2],3,4,5]
l2 = l1[:]
l2[1].append('a')

print(l1,id(l1))
print(l2,id(l2))

[1, [2, 'a'], 3, 4, 5] 139689202159240
[1, [2, 'a'], 3, 4, 5] 139689202158728

三、浅拷贝 copy

1)子级浅拷贝

l1 = [1,2,3]
l2 = l1.copy()
l2.append('a')
print(l1,id(l1))
print(l2,id(l2))

[1, 2, 3] 139654861499016
[1, 2, 3, 'a'] 139654860885640

2)孙子级浅拷贝

l1 = [1,2,[4,5,6],3]
l2 = l1.copy()
l2.append('a')
print(l1,id(l1))
print(l2,id(l2))

l1[2].append('aa')
print(l1,id(l1))
print(l2,id(l2))

四、深拷贝 deepcopy


import copy
l1 = [1,2,[4,5,6],3]
l2 = copy.deepcopy(l1)
print(l1,id(l1))
print(l2,id(l2))

l1.append('aa')
l1[2].append('a')
print(l1,id(l1))
print(l2,id(l2))

[1, 2, [4, 5, 6], 3] 140161789759048
[1, 2, [4, 5, 6], 3] 140161766141320

[1, 2, [4, 5, 6, 'a'], 3, 'aa'] 140161789759048
[1, 2, [4, 5, 6], 3] 140161766141320
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值