python赋值-浅拷贝-深拷贝

赋值:

    对象之间的赋值本质上是对象之间的引用的传递而已,也就是多个对象指向同一个数据空间。

浅拷贝:

   浅拷贝是对一个对象的顶层数据的拷贝

  •     浅拷贝 copy.copy(x)
  •     切片操作 x[:]
  •     copy方法 x.copy()

深拷贝:

    深拷贝是对于一个对象所有层次的拷贝(递归)

    copy.deepcopy(x)

为什么Python中大多数都是浅拷贝呢?

  • 时间角度,浅拷贝花费时间更少
  • 空间角度,浅拷贝花费内存更少
  • 效率角度,浅拷贝只拷贝顶层数据,一般情况下比深拷贝效率高。

注意

  • copy.copy和copy.deepcopy对于不可变类型没有意义,全部等价于对象之间的赋值操作。
  • copy.copy()对于可变类型,会进行浅拷贝

问题:

b = [9,9,9]
a = [1,2,3,b]
c = copy.copy(a)
d = copy.deepcopy(a)

a[0] = 9
请问c和d值分别是多少

# 修改的a[0]即为1,是不可变数据类型,所以此时a=[9,2,3,[9,9,9]],但c、d的指向不变
c = [1,2,3,[9,9,9]]
d = [1,2,3,[9,9,9]]

a[3][2] = 10
请问c和d值分别是多少

# 修改的a[3][2]即[9,9,9]为可变数据类型,由于c为a的浅拷贝所以c的指向会发生改变,d为a的深拷贝所有指向不会改变
c = [1,2,3,[9,9,10]]
d = [1,2,3,[9,9,9]]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值