美文网首页
python 的深浅copy 与 赋值

python 的深浅copy 与 赋值

作者: 王镇_ee87 | 来源:发表于2020-12-08 09:00 被阅读0次

    赋值

    对于赋值运算,就是共同指向一个内存地址,将一个值赋予一个变量,那么它的内存地址同时也赋予了他,如果值是不可变类型,改变值,就会产生一个新值和新内存地址。

    如果值是可变类型那么内存地址不会变
    s1 = 'alex'
    s2 = s1   # 赋值
    >>> print(s1,s2)
    alex 6643192
    alex 6643192
    
    当值是可变类型时
    s1 = []
    s2 = s1
    s2.append("a")
    >>> print(s1,id(s1))
    >>> print(s2,id(s2))
    ['a'] 12194696
    ['a'] 12194696
    

    深浅copy

    浅层copy 拷贝第一层的数据独立,第二层及以后公用一个内存地址

    #copy
    l1 = [1,2,3]
    l2 = l1.copy()
    l1.append(666)   #在第一层里添加数据
    >>> print(l1,id(l1))
    >>> print(l2,id(l2))
    [1,2,3,666] 7410568
    [1,2,3] 7392688
    
    l1 = [1,[22,33],2,3]
    l2 = l1.copy()
    l1[1].append(666)   #在第二层添加数据
    >>> print(l1,id(l1))
    >>> print(l2,id(l2))
    [1,[22,33,666],2,3] 7411700
    [1,[22,33,666],2,3] 7411700
    

    深层copy 要引用模块 import copy 对于深copy,无论多少层,在内存中都是两个独立的内存地址

    import copy
    l1 = [1,[22,33,],2,3]
    l2 = copy.deepcopy(l1)
    l1.append(777)
    l1[1].append(666)
    >>> print(l1,id(l1),id(l1[1]))
    >>> print(l2,id(l2),id(l2[1]))
    [1,[22,33,666],2,3,777] 12617032 12618824
    [1,[22,33],2,3] 12617544 12618888
    

    相关文章

      网友评论

          本文标题:python 的深浅copy 与 赋值

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