美文网首页
2018-10-10 Copy

2018-10-10 Copy

作者: iqunqunqun | 来源:发表于2018-10-10 11:15 被阅读7次

    文字描述:

    赋值: 相当于把为对象增添了一个名字,并没有创建一个新对象。
    
    shallow copy: 创建了一个新的对象,并对对象的一级目录(最外层目录)进行了copy,当试图修改嵌套
    目录时,父本也会随之改变。
    
    deepcopy:类似于windows的复制,无论如何修改,父本也不会改变。
    

    代码:

    # id值
    
    a = [1,2,3,[4,5]]
    b = a                            
    c = copy.copy(a)
    d = copy.deepcopy(a)
    id(a),id(b),id(c),id(d)
    (130476552, 130476552, 130476472, 130476352)
    

    由代码可以清楚地了解,赋值之后ID值一样而shallow copy 和 deepcopy 的ID值都已经改变。

    # 在最外层列表增加值
    a.append(6)
    
    b  # 赋值
    [1, 2, 3, [4, 5], 6]
    
    c  # shallow copy
    [1, 2, 3, [4, 5]]
    
    d  # deepcopy
    [1, 2, 3, [4, 5]]
    

    往最外层列表添加值时,shallow copy和deepcopy不会改变。

    # 在嵌套列表增添值
    a[3].append(7)
    
    b   # 赋值
    [1, 2, 3, [4, 5, 7], 6]
    
    c  # shallow copy
    [1, 2, 3, [4, 5, 7]]
    
    d  # deepcopy
    [1, 2, 3, [4, 5]]
    

    在内层列表增添值时,shallow copy会改变,deepcopy不会改变。

    由于shallow copy在复制时,只复制了最外层,而子对象并没有复制,与父本共享子对象,就导致了当父本修改子对象时,shallow copy也随之改变。

    相关文章

      网友评论

          本文标题:2018-10-10 Copy

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