引用、浅拷贝、深拷贝之间的不同以及实现方式

list1 = [11,12,13]

#引用,本质上就是地址的传递,与浅拷贝不一样

list2 = list1

print(list1 == list2) #==表示数值是否相同
print(list1 is list2) #is表示地址是否相同
print(‘修改list1’)
list1[0] = 0
print(“展示修改之后的list2”,list2)

##浅拷贝
##浅拷贝中地址不同,数值相同
list2 = list1.copy()
print(list1==list2) #数值依旧相同
print(list1 is list2) #地址不同了
print(id(list1)) #id 用来查看地址
print(id(list2))

##深拷贝,需要导包copy。deepcopy

from copy import deepcopy
list2 = deepcopy(list1)
print(list1==list2) #数值依旧相同
print(list1 is list2) #地址不同了
print(id(list1)) #id 用来查看地址
print(id(list2))
#当需要拷贝的东西只有一层的时候深拷贝与浅拷贝性质相同
#当需要拷贝的文件中嵌套了别的文件,深拷贝不受影响。浅拷贝受影响
#比如列表嵌套列表
list1 = [[11,22,33],12,13]

浅拷贝,浅拷贝受影响

list2 = list1.copy()
list1[0][0] = 0
print(‘修改之后的list1’,list1)
print(‘修改之后的list2’,list2)
‘’’
修改之后的list1 [[0, 22, 33], 12, 13] #其中的12,13两个数为小整数池
修改之后的list2 [[0, 22, 33], 12, 13]

‘’’

深拷贝,不受影响

list2 = deepcopy(list1)
list1[0][0] = 0
print(‘修改之后的list1’,list1)
print(‘修改之后的list2’,list2)

‘’’
修改之后的list1 [[0, 22, 33], 12, 13]
修改之后的list2 [[11, 22, 33], 12, 13]
‘’’
##深拷贝中将内嵌的列表也拷贝了一个地址。所以不受影响
#深拷贝也叫递归拷贝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南桥经不起秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值