深入理解python,赋值引用,浅拷贝和深拷贝三者之间的关系

  1. 赋值引用:
    如a = b 可以理解为一个很浅的浅拷贝,即a只是拷贝了b的对象引用,也可以这么说,a只是拷贝了b的对象指向,因此a,b指向了同一个对象地址,即id(a) == id(b)
  2. 浅拷贝:
    如a=copy.copy(b),a只是拷贝了b的“最外”一层,而不是b这个对象的引用,因此id(a) 不等于 id(b)
    (注:元组这个类型除外,后面补充)
  3. 深拷贝:
    如a=copy.deepcopy(b),此时a不仅仅拷贝了b的最外一层,就连b的所有内层部分,全部都进行了拷贝,因此a和b完全没有任何关系。
    (注:元组这个类型除外,后面补充)

以下是图例:
4. C语言和python语言中,赋值的区别:
python中赋值,仅仅是对象的引用,而C语言中却是完全拷贝,相当于python中的深拷贝,即deepcopy
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5. 浅拷贝示例如下:
在这里插入图片描述
6. 浅拷贝和深拷贝进行对比,示例如下: 在这里插入图片描述
注意:元组的赋值,浅拷贝和深拷贝,需要注意:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
元组的总结:
如果元组中的元素都是不可变的,赋值引用,浅拷贝,深拷贝都是对元组的引用,三者性质一样;如果元组中的元素存在可变的元素(如列表,字典,集合等可变元素),那么赋值引用和浅拷贝是对元组的引用,而deepcopy则是对这些可变元素的深拷贝,id与前两者不一样。即指向的对象不一样。

其他方式的拷贝:
7. 分片表达式可以赋值一个序列,是“浅拷贝”
在这里插入图片描述
8. 字典的copy方法可以拷贝一个字典:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值