zoukankan      html  css  js  c++  java
  • python之深浅copy

    深浅copy

    1、赋值运算

    a = [1, 2, 3]
    b = a
    a.append(666)
    print(b)
    #output:[1, 2, 3, 666]

    对于赋值运算来说,a与b指向的是同一个内存地址,所以他们是完全一样的。

    2、浅copy

    # 对于浅copy来说,第一层是完全独立的,从第二层会开始公用一个内存地址
    l1 = [1, 2, 3]
    l2 = l1.copy()
    l1.append(66)
    print(l2)
    print(id(l1), id(l2))
    
    l1 = [1, 2, 3, [4, 5]]
    l2 = l1.copy()
    l1[3].append(66)
    print(l2)
    print(id(l1[-1]), id(l2[-1]))
    #output:

    [1, 2, 3]
    31211848 35431560
    [1, 2, 3, [4, 5, 66]]
    35432264 35432264

    对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。

    3、深copy deepcopy

    import copy
    l1 = [1,2,3, [4,5]]
    l2 = copy.deepcopy(l1)
    l1[-1].append(66)
    print(l1, l2)

    对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。

  • 相关阅读:
    Source Insight新建工程文件
    移植3.4.2内核之韦东山笔记
    移植最新u-boot(裁剪和修改默认参数)
    C++与C语言在结构体上的区别
    VIP之Switch
    VIP之CSC
    VIP之Scaler
    VIP之FrameBuffer
    VIP之MixerII
    VIP之Clipper
  • 原文地址:https://www.cnblogs.com/zh-lei/p/8763240.html
Copyright © 2011-2022 走看看