美文网首页
【python】copy和赋值

【python】copy和赋值

作者: 我写的BUG代码少 | 来源:发表于2020-09-12 22:02 被阅读0次

    shallow copy 和 deep copy

    【引用】https://blog.csdn.net/u010712012/article/details/79754132

    • 对于简单的 object,用 shallow copy 和 deep copy 没区别
    • 复杂的 object, 如 list 中套着 list 的情况
      • shallow copy 中的 子list,并未从原 object 真的「独立」出来
      • 也就是说,如果你改变原 object 的子 list 中的一个元素,你的 copy 就会跟着一起变。
    • copy.deepcopy().copy() 是一样的
    import copy
    
    x = [1,[10]]
    y = copy.copy(x)      # 尽管内存地址变了,但浅层copy无法让子list真正独立     
    z = copy.deepcopy(x)  # z = x.copy()
    y[1][0] = 250
    print('x',x)
    print('y',y)
    print('z',z)
    print(id(x))
    print(id(y))
    print(id(z))
    
    >>>
    
    x [1, [250]]
    y [1, [250]]
    z [1, [10]]
    2232827410688
    2232822278912
    2232817470848
    

    赋值

    当value是整体改变的时候(list/数值),内存地址也会发生改变。不同的值存放在不同的内存地址里。

    当list是部分改变,内存地址还是原来的地址,值也跟着改变


    • 当value是整体改变的时候(list/数值),内存地址也会发生改变。不同的值存放在不同的内存地址里。
    a = 1           # *
    b = a
    print(id(a))
    print(id(b))
    a = 3           # ***
    print(a)
    print(b)
    print(id(a))
    print(id(b))
    >>>
    140707619157792  # *
    140707619157792
    3
    1
    140707619157856  # ***
    140707619157792
    
    a = [1,2,3]    # *
    b = a
    print(id(a))
    print(id(b))
    a = [1]        # ***
    print(a)
    print(b)
    print(id(a))
    print(id(b))
    >>>
    2232832929728  # *
    2232832929728
    [1, 2]
    [1, 2, 3]
    2232832046656  # ***
    2232832929728
    
    • 当list是部分改变,内存地址还是原来的地址,值也跟着改变
    a = [1,1]
    b = a
    print(id(a))
    print(id(b))
    a[1] = 2      # ***
    print(a)
    print(b)
    print(id(a))
    print(id(b))
    >>>
    2232834388992
    2232834388992
    [1, 2]
    [1, 2]
    2232834388992
    2232834388992
    

    相关文章

      网友评论

          本文标题:【python】copy和赋值

          本文链接:https://www.haomeiwen.com/subject/vzjgektx.html