Python深浅copy

深浅copy

数据类型的分类

  • 可变(不可哈希)的:list dict set
  • 不可变(可哈希)的:str bool int tuple
浅copy:

会在内存中新开辟一个空间,存放这个copy的列表,但是列表里的内容还是沿用之前对象的内存地址。所以尽管l1,l2的id不同,但是内容id是相同的。

#浅拷贝
l1 = [1,2,3,[4,5,6]]
l2 = l1.copy()
print(id(l1))
print(id(l2))
l1.append(88)
print(l1)
print(l2)
print("-----给列表里的小列表添加值------")
print(id(l1[3]))
print(id(l2[3]))
l2[-1].append("哈哈哈")
print(l1)
print(l2)
1979862092936
1979865206344
[1, 2, 3, [4, 5, 6], 88]
[1, 2, 3, [4, 5, 6]]
-----给列表里的小列表添加值------
1979865206472
1979865206472
[1, 2, 3, [4, 5, 6, '哈哈哈'], 88]
[1, 2, 3, [4, 5, 6, '哈哈哈']]

在这里插入图片描述

#切片也是浅copy
l1 = [1,2,3,[4,5,6]]
l2 = l1[:]
l1[-1].append("哈哈")
print(l1)
print(l2)
[1, 2, 3, [4, 5, 6, '哈哈']]
[1, 2, 3, [4, 5, 6, '哈哈']]
深copy:

会在内存中开辟新空间,将原列表以及列表里面的可变数据类型重新创建一份,不可变的数据类型则沿用之前的

#深copy
import copy
l1 = [1,2,3,[4,5,6]]
l2 = copy.deepcopy(l1)
print(id(l1)) 
print(id(l2))
print(id(l1[0]),id(l2[0]))    # 不可变的数据类型则沿用之前的,所以id相同
print(id(l1[-1]),id(l2[-1])) #  可变的数据类型在内存中重新创建一份,所以id不同
l1[-1].append("哈哈哈")
print(l1)
print(l2)
1490814040776
1490814773896
140707873329984 140707873329984
1490813655816 1490814040584
[1, 2, 3, [4, 5, 6, '哈哈哈']]
[1, 2, 3, [4, 5, 6]]

在这里插入图片描述
区别:

浅copy:list dict:嵌套的可变的数据类型是同一个。

深copy:list dict:嵌套的可变的数据类型不是同一个。

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值