Python里列表的的赋值,深拷贝,浅拷贝的区别

python里对于列表list的赋值,深拷贝,浅拷贝都有很大的区别

  • 赋值

    p1 = ["A", "B", "C"]
    p2 = p1
    print(p2) # 输出['A', 'B', 'C']
    p1[0] = 1
    print(p2) # 输出[1, 'B', 'C']
    

    这里先对p1赋值,然后用对p2赋值,修改p1后,p2也会跟着发生变化,因此pyhon里列表的赋值其实可以看成C里的数组,赋值过去的只是一个地址,将p1,p2都指向同一个内存块,因此改变一个会引起连锁.

  • 浅拷贝

    import copy
    p1 = ["A", "B", "C"]
    # 三种浅copy方式
    p2 = p1.copy()
    p2 = p1[:]
    p2 = copy.copy(p1)
    
    print(p2) # 输出为['A', 'B', 'C']
    p1[0] = 1
    print(p2) # 输出为['A', 'B', 'C']
    
  • 浅拷贝,即将列表的"第一层"全部拷贝过去,但是第二层还是一个地址,指向相同的内存块,典型例子如下

    p1 = ["A", ["a", "b"], "C"]
    p2 = p1.copy
    print(p2) # 输出['A', ['a', 'b'], 'C']
    p1[1][0] = 1
    print(p2) # 输出['A', [1, 'b'], 'C']
    

    这里修改p1的第一层,不会影响p2,但是修改第二层就会影响,所以称之为浅拷贝(只真正拷贝了一层,再往下还是指向同一块内存)

  • 深拷贝

    import copy
    
    p1 = ["A", ["a", "b", "c"], "C"]
    
    p2 = copy.deepcopy(p1)
    
    print(p2) # 输出['A', ['a', 'b', 'c'], 'C']
    p1[1][0] = 1
    print(p2) # 输出['A', ['a', 'b', 'c'], 'C']
    

    看完以上的,深拷贝就简单多了,可以看成对列表完整的拷贝,拷贝完成后两个列表互不干涉.最后附上菜鸟笔记里的图.
    在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值