美文网首页
深 / 浅拷贝

深 / 浅拷贝

作者: 慕知 | 来源:发表于2021-08-04 17:01 被阅读0次

    浅拷贝

    # 元祖类型 浅拷贝
    info=(11,22,["name","age"])
    print(info,type(info),id(info))
    # (11, 22, ['name', 'age']) <class 'tuple'> 4306516736
    
    
    info[2][0]="age1"
    print(info,type(info),id(info))
    # (11, 22, ['age1', 'age']) <class 'tuple'> 4306516736
    
    
    
    
    
    
    《〈《〈《 参考下图 》〉》〉》
    
    info=(11,22,[33,44])
    # 元祖类型不可改变,不可改变的是索引对应的value的id,索引0对应的是整数类型(不可改变),所以会报错
    info[0]=777
    #     info[0]=777
    # TypeError: 'tuple' object does not support item assignment
    
    
    # 索引2对应的是列表类型(可改变类型),更改列表里对应的索引1的值,如下
    info[2][1]=66
    print(info)
    #(11, 22, [33, 66])
    
    
    
    
    列表类型下:
    l=[11,22,[33,44]]
    new_l=l.copy()
    
    # 更新第一层的value,不会影响copy的新文件
    l[0]=99
    print(l)
    print(new_l)
    # [99, 22, [33, 44]]
    # [11, 22, [33, 44]]
    
    # 更新第二层,则也同时会影响新文件,随着源文件的改变而改变
    l[2][1]=100
    print(l)
    print(new_l)
    # [99, 22, [33, 100]]
    # [11, 22, [33, 100]]
    
    总结:
    浅拷贝中,只拷贝第一层
    即
    第二层及往后的层的内容与源文件保持一致,改变而改变的
    第一层的修改不会影响新拷贝的文件
    
    
    
    
    
    PS:
    注意⚠️ 元祖类型不可copy
    inn=(11,22,[33,44])
    new_inn=inn.copy
    print(new_inn)
    #     new_inn=inn.copy
    # AttributeError: 'tuple' object has no attribute 'copy'
    
    
    
    浅拷贝

    深拷贝

    
    import copy                                    from copy import deepcopy
    l=[11,22,[33,44]]                 或            l=[11,22,[33,44]]
    new_l = copy.deepcopy(l)                        new_l = deepcopy(l)
    #from copy import deepcopy
    #l=[11,22,[33,44]]
    #new_l = deepcopy(l)
    
    
    # 改变源变量l的第一层,不影响copy的新变量
    l[0]=99
    print(l)
    print(new_l)
    # [99, 22, [33, 44]]
    # [11, 22, [33, 44]]
    
    
    # 改变源变量的第二层,依旧不影响
    l[2][1]=999
    print(l)
    print(new_l)
    # [99, 22, [33, 999]]
    # [11, 22, [33, 44]]
    
    
    

    相关文章

      网友评论

          本文标题:深 / 浅拷贝

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