python 深拷贝与浅拷贝

基本

 python中的等于号即为浅拷贝 这样的话他们的地址是相同的 如下个例子可以看出当a中的数据被修改时b的值也会发生改变

[root@localhost day1]# python3
Python 3.6.0 (default, Dec 27 2018, 17:19:56) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a=[1,2,3]
>>> b=a
>>> id(a)
139672433624840
>>> id(b)
139672433624840
>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3, 4]
>>> 

 python中的深拷贝 可以通过copy中的deepcopy完成 即将一个变量所指向的内存中的东西完全拷贝到另一个地址空间之中

>>> import copy
>>> c=copy.deepcopy(a)
>>> id(a)
139672433643592
>>> id(c)
139672306328968
>>> 

copy.copy() 与copy.deepcopy()的区别

递归拷贝  在其deepcopy时 会将列表中的元素也进行深拷贝

>>> a=[1,2,3]
>>> b=[3,4,5]
>>> c=[a,b]
>>> c
[[1, 2, 3], [3, 4, 5]]
>>> d=copy.deepcopy(c)
>>> id(c[0])
139672306327624
>>> id(d[0])
139672306328968
>>> 

copy.copy()在拷贝时 在copy元组时 可遍历的数据类型copy深拷贝第一层 其余浅拷贝(如列表) 如果为不可遍历型都为为浅copy (如元组)

>>> e=copy.copy(c)       #深拷贝第一层 第二层为浅拷贝
>>> id(c[0])
139672306327624
>>> id(e[0])
139672306327624
>>> id(d[0])
139672306328968
>>> a=(1,2,3)             #浅拷贝
>>> b=copy.copy(a)
>>> id(a)
139672303808656
>>> id(b)
139672303808656
>>> 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值