浅析python中的深拷贝和浅拷贝

  1. 引用:内存地址
  2. Python中所有赋值都是引用
  3. 浅拷贝:复制第一层(地址改变) 其他都是引用
  4. 深拷贝:全部复制,重新开辟一块空间
  5. 补充:切片是浅拷贝

 

  • 可变类型:改变值,地址不会改变
  • 不可变类型:改变值,地址改变

 

实例:

a = 1

a = 2

以上两者内存地址不一样,因为数字不可变类型

 

a = [1, 2, 3]

b = a     b是赋值

此时a 和 b 内存地址一样

b = [1, 2, 3]

此时a = [1, 2,3, 4]

b = [1, 2, 3, 4]

此时a和b数值一样,内存地址一样,因为a是可变类型

 

import copy

a = [1, 2, 3]

b = [11, 22, 33]

c = [a, b]

c = [[1, 2,3],[11, 22, 33]]

d = copy.copy(c)

此时d浅拷贝c第一层,也就是d 重新拷贝了一块地址

其内列表a和列表b只是引用

e =copy.deepcopy(c)

此时e深拷贝c全部,此时e和c地址一样

其内列表[1, 2,3]和列表[11, 22, 33]也拷贝了一份,

也就是两者地址已改变

 

此时 a = [1,2, 3, 4]

c = [[1, 2, 3,4],[11, 22, 33]]

d = [[1, 2, 3,4],[11, 22, 33]]

 

e = [[1, 2,3],[11, 22, 33]]


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值