python中浅拷贝与深拷贝

1.使用深拷贝或浅拷贝时,需要先引入copy

    import copy

  <1>.不使用copy的方式

    # a = [1, 2, 3]
    # b=a相当于把a赋值给b,a和b指向的是同一个引用,当a的值发生了改变,b也会随之改变
    # b = a
    # a[0] = 5
    # print(a)
    # [5, 2, 3]
    # print(b)
    # [5, 2, 3]

  <2>.浅拷贝copy,一维列表时,浅拷贝可以保证被拷贝的变量的值不会被修改

    a = [1, 2, 3, 4]
    b = copy.copy(a)
    b[2] = 9
    print(a)
    #[1, 2, 3, 4]
    print(b)
    #[1, 2, 9, 4]

    # 浅拷贝的第二种方式,取出a的值赋值给b
    # a = [1, 2, 3, 4]
    # b = a[:]
    # b[2] = 9
    # print(a)
    #[1, 2, 3, 4]
    # print(b)
    #[1, 2, 9, 4]

  <3>.深拷贝copy.deepcopy,当列表中有嵌套时,使用浅拷贝,a列表嵌套的列表不会被拷贝,因此当b列表里面列表的值发生了改变,a列表里面的值也会改变

    a = [1, 2, [4, 5], 8]
    b = copy.copy(a)
    b[2][0] = 9
    print(a)
    #[1, 2, [9, 5], 8]
    print(b)
    #[1, 2, [9, 5], 8]

为解决这种问题,需要用到深拷贝copy.deepcopy,深拷贝相当于把原来的列表完整的复制了一份
    a = [1, 2, [4, 5], 8]
    b = copy.deepcopy(a)
    b[2][0] = 7
    print(a)
    #[1, 2, [4, 5], 8]
    print(b)
    #[1, 2, [7, 5], 8]

 

posted @ 2021-01-26 00:53  maxwell11  阅读(121)  评论(0编辑  收藏  举报