python中赋值、浅拷贝、深拷贝之间的区别

先总的概括一下

  • 赋值,这里不是我们所熟知的简单的赋值了,赋的是对原对象的引用,表面是俩人儿,暗地里却穿一条裤子
  • 浅拷贝,只复制了原对象的表面,更深层次的还是在以引用的形式传递
  • 深拷贝,完完全全就是简单复制了原对象的数据组织方式和数据,成为一个彻头彻尾新的对象
>>> import copy
>>> a = [1, 2, 3,['a', 'b']]
>>> b = a                      #赋值
>>> c = copy.copy(a)           #浅拷贝
>>> d = copy.deepcopy(a)       #深拷贝
>>> print(a);print(b);print(c);print(d)
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b']]          #目前看来,复制之后的东西表现的一样
>>> a.append(5)                #现在我们来改变以下原对象a
>>> print(a);print(b);print(c);print(d)
[1, 2, 3, ['a', 'b'], 5]
[1, 2, 3, ['a', 'b'], 5]
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b']]          
#至此,我们看到,他们的反应开始出现差异,赋值得到的b随着a的变化而变化
#通过浅拷贝和深拷贝得到的c和d并没有发生改变
>>> a[3].append('c')           #然后我们尝试改变了原对象a的子对象的值,再看看他们的反应
>>> print(a);print(b);print(c);print(d)
[1, 2, 3, ['a', 'b', 'c'], 5]
[1, 2, 3, ['a', 'b', 'c'], 5]
[1, 2, 3, ['a', 'b', 'c']]
[1, 2, 3, ['a', 'b']]
>>>
#好了,这下热闹了,赋值得到的b仍然坚决拥护a的决定,积极响应
#浅拷贝得到的c这把也开始有所响应
#只有深拷贝仍然坚持己见,保持原有的模样

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值