python深拷贝和浅拷贝和赋值的区别

深拷贝和浅拷贝的区别

我的理解就是

赋值:这个好说,一个人叫张三,A叫他张三,B叫他张四,但都是同一个人,张四不过是他的一个外号,如果张三被打了,也就是张四被打了

深拷贝:这个也比较好理解,克隆了一个完全一模一样的人,张三,有一个儿子张二,我们进行深拷贝,克隆出了一个张三二号,一个张二二号,张二二号是张三二号的儿子,张三被打断了腿,张三二号是没变化的,张二被打断了腿,张二二号也是没变化的,完全自主的父子

浅拷贝:介于复制和深拷贝之间的状态,比如说张三有一个儿子张二,我把张三克隆出来了一个张三二号,但是我们还有一个共同的儿子张二,如果张三的儿子被打断了腿,等于张三二号的儿子被打断了腿,但是如果张三长了痔疮或者张三被人打断了腿,对于被克隆出来的张三二号来说,是不受影响的,这个时候就是,老子是自主的,儿子是共享的

"""
@File    :   qianCopy.py    
@Contact :   zhangyin@newlink.com
@Modify Time      @Author    @Version
------------      -------    --------    
2022/6/16 8:47 下午   张胤        1.0         
@Desciption:
"""
import copy

alist = [1, 2, 3, ["a", "b"]]
# 浅拷贝
blist = copy.copy(alist)
# 赋值
clist = alist
# 深拷贝
dlist = copy.deepcopy(alist)
print(alist)
print(blist)
print(clist)
print(dlist)
alist.append(4)
print(alist)
print("如果是浅拷贝,没有拷贝子对象")
print(blist)
print("赋值,传递对象的引用而已,原数据怎么变,clist怎么变")
print(clist)
print("深拷贝,不管原数据怎么变,dlist都不变")
print(dlist)
alist[3].append("cccc")
print(alist)
print("如果是浅拷贝,没有拷贝子对象,所以原数据alist的子对象对变更后,浅拷贝的子对象blist的子对象也会变更")
print(blist)
print("赋值,传递对象的引用而已,原数据怎么变,clist怎么变")
print(clist)
print("深拷贝,不管原数据怎么变,dlist都不变")
print(dlist)
dlist.append(99)
print(alist)
print(blist)
print(clist)
print("深拷贝,修改dlist也不会引起原数据的变更,就是相互独立的")
print(dlist)
blist[3].append(101)
print("浅拷贝,修改blist的子对象,也会影响原数据的子对象")
print(alist)
print(blist)
print(clist)
print(dlist)

结果

[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b'], 4]
如果是浅拷贝,没有拷贝子对象
[1, 2, 3, ['a', 'b']]
赋值,传递对象的引用而已,原数据怎么变,clist怎么变
[1, 2, 3, ['a', 'b'], 4]
深拷贝,不管原数据怎么变,dlist都不变
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b', 'cccc'], 4]
如果是浅拷贝,没有拷贝子对象,所以原数据alist的子对象对变更后,浅拷贝的子对象blist的子对象也会变更
[1, 2, 3, ['a', 'b', 'cccc']]
赋值,传递对象的引用而已,原数据怎么变,clist怎么变
[1, 2, 3, ['a', 'b', 'cccc'], 4]
深拷贝,不管原数据怎么变,dlist都不变
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b', 'cccc'], 4]
[1, 2, 3, ['a', 'b', 'cccc']]
[1, 2, 3, ['a', 'b', 'cccc'], 4]
深拷贝,修改dlist也不会引起原数据的变更,就是相互独立的
[1, 2, 3, ['a', 'b'], 99]
浅拷贝,修改blist的子对象,也会影响原数据的子对象
[1, 2, 3, ['a', 'b', 'cccc', 101], 4]
[1, 2, 3, ['a', 'b', 'cccc', 101]]
[1, 2, 3, ['a', 'b', 'cccc', 101], 4]
[1, 2, 3, ['a', 'b'], 99]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值