Python学习(15)之 深浅拷贝

赋值

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

>>> a = [11,22]
>>> b = a
>>> id(a)
2002127137352
>>> id(b)
2002127137352

浅拷贝

浅拷贝:对一个对象的顶层数据的拷贝,里面是引用原被拷贝变量的地址空间

>>> a = [11,22]
>>> b = [1,2]
>>> c = [a,b]
>>> id(a)
2002126897352
>>> id(b)
2002126167752
>>> id(c)
2002127135304
>>> import copy
>>> d = copy.copy(c)
>>> id(d)
2002127137352
>>> id(d[0])
2002126897352
>>> id(d[1])
2002126167752
>>> a.append(13)
>>> c
[[11, 22, 13], [1, 2]]
>>> d
[[11, 22, 13], [1, 2]]

深拷贝

深拷贝:对于一个对象所有层次的递归拷贝,开辟新的地址空间且全部拷贝,无论后来被拷贝变量如何改变,均无关。

>>> a = [11,22]
>>> b = [1,2]
>>> c = [a,b]
>>> d = copy.deepcopy(c)
>>> c
[[11, 22], [1, 2]]
>>> d
[[11, 22], [1, 2]]
>>> id(c)
2002127761032
>>> id(d)
2002127135304
>>> id(c[0])
2002127760968
>>> id(d[0])
2002127760648
>>> c.append(33)
>>> c
[[11, 22], [1, 2], 33]
>>> d
[[11, 22], [1, 2]]

赋值与拷贝的区别

赋值是引用的改变,而拷贝是重新开辟一片空间

深拷贝与浅拷贝的区别

浅拷贝只是拷贝最外层数据,而深拷贝是递归拷贝所有层数据。

python中大部分方法都是浅拷贝(如切片), 为什么呢?

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

对不可变数据类型和可变数据类型的copy不同

  • copy.copy对于可变类型,会进行浅拷贝,
  • copy.copy和copy.deepcopy对于不可变类型没有意义,全部等价于对象之间的赋值操作。
    在这里插入图片描述

拷贝为列表

在这里插入图片描述
在这里插入图片描述

拷贝为元组
若浅拷贝拷贝为元组 ,那么他不会进行,壳也不会拷贝,仅仅是引用、指向
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值