python总结——浅拷贝和深拷贝

目录

1. 基本概念

2. 代码演示及分析

2.1 浅拷贝

2.1.1 浅拷贝内存示意图

 2.2 深拷贝

2.2.1 深拷贝内存示意图


1. 基本概念

        浅拷贝:只拷贝对象的地址,不拷贝对象的内容;深拷贝:将内容也拷贝,对子对象修改不会影响原对象 。

        python中浅拷贝函数:copy();深拷贝函数:deepcopy()

2. 代码演示及分析

2.1 浅拷贝

"""测试浅拷贝"""
def test_copy():    
    a = [10, 20, [5, 6]]
    b = copy.copy(a)
    print(".....原数据......")
    print("a", a)
    print("b", b)
    b.append(30)
    b[2].append(7)
    print("......浅拷贝......")
    print("a", a)
    print("b", b)




.....原数据......
a [10, 20, [5, 6]]
b [10, 20, [5, 6]]
.....浅拷贝......
a [10, 20, [5, 6, 7]]
b [10, 20, [5, 6, 7], 30]

        为了深刻理解“浅拷贝只拷贝对象,不拷贝对象的内容。”,对上述代码进行了图示:

2.1.1 浅拷贝内存示意图

        从图中可知,浅拷贝完成后a、b变量有了各自的对象,但对象指向的内容是共享的。由于b[2]对象的内容是a和b共享的,因此对b[2]做修改,a也会发生变化。由于b对象已经对从a中独立,则b.append(30)只会作用在b上,不会影响a。

2.2 深拷贝

"""测试深拷贝"""
def test_deepcopy():    
    a = [10, 20, [5, 6]]
    b = copy.deepcopy(a)
    print(".....原数据......")
    print("a", a)
    print("b", b)
    b.append(30)
    b[2].append(7)
    print(".....深拷贝......")
    print("a", a)
    print("b", b)



.....原数据......
a [10, 20, [5, 6]]
b [10, 20, [5, 6]]
.....深拷贝......
a [10, 20, [5, 6]]
b [10, 20, [5, 6, 7], 30]

        为了深刻理解“将内容也拷贝,对子对象修改不会影响原对象 。”,对上述代码进行了图示:

2.2.1 深拷贝内存示意图

 个人总结,不对之处欢迎指出 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值