zoukankan      html  css  js  c++  java
  • 七、浅拷贝和深拷贝

    name1 = 'alex'
    name2 = name1
    name1 = 'rooney'
    name2 = ?
    答案:name2还是等于alex,因为字符串的重新定义是在内存里面重新开辟一个空间,字典,列表,就是在原来的内存空间里面修改,所以上题如果是字典或者列表的话那name2的值就是rooney。
     
    总结:
    字符串:不紧跟=======》
    字典、列表:紧追不舍=======》
     
    11.copy ======》浅拷贝(只copy第一层,再往下它就不copy了)
    首先,我创建了一个这样的字典,里面有嵌套
    >>> for i in range(5):c[i] = []
     
    >>> c
    {0: [], 1: [], 2: [], 3: [], 4: []}
    >>> c[1]
    []
    >>> c[1].append({'b':'rooney'})
    >>> c
    {0: [], 1: [{'b': 'rooney'}], 2: [], 3: [], 4: []}
     
     
    然后,我用d=c,把c的值赋给了d,
    >>> d = c
    >>> d
    {0: [], 1: [{'b': 'rooney'}], 2: [], 3: [], 4: []}
    >>> c
    {0: [], 1: [{'b': 'rooney'}], 2: [], 3: [], 4: []}
     
     
    根据上面的说法,这时候我改变c的值,d也跟着变
    >>> c['rain'] = "test"
    >>>
    >>> c
    {0: [], 1: [{'b': 'rooney'}], 2: [], 3: [], 4: [], 'rain': 'test'}
    >>> d
    {0: [], 1: [{'b': 'rooney'}], 2: [], 3: [], 4: [], 'rain': 'test'}
     
     
    然后我让e=c.copy(),我们会发现,当c的值改变了,e并没有跟着改变
    >>> e=c.copy()
    >>> c['sun'] = "wwwwwww"
    >>> c
    {0: [], 1: [{'b': 'rooney'}], 2: [], 3: [], 4: [], 'rain': 'test', 'sun': 'wwwwwww'}
    >>> e
    {0: [], 1: [{'b': 'rooney'}], 2: [], 3: [], 4: [], 'rain': 'test'}
     
    最后我把c里面嵌套的字典的rooney改成了ramos,发现e的值也跟着变了
    >>> c[1][0]['b']
    'rooney'
    >>> c[1][0]['b']='ramos'
    >>> d
    {0: [], 1: [{'b': 'ramos'}], 2: [], 3: [], 4: [], 'rain': 'test', 'sun': 'wwwwwww'}
    >>> e
    {0: [], 1: [{'b': 'ramos'}], 2: [], 3: [], 4: [], 'rain': 'test'}
    >>>
    
    总结:
    浅拷贝的意思就是第一层我不拷贝,并且以后第一层的修改我也不会跟着变,但是里面嵌套的层的修改我还是会跟着变
    深拷贝的意思就是第一层我不拷贝,并且以后第一层的修改我也不会跟着变,但是里面嵌套的层的修改我也不跟着变,即相当于字符串一样,你变你的,我怎么都不跟着你变了,我完全独立了。
     
    如果你想深copy,就要介入python的一个独立的模块,名字就叫做copy
    import copy
    f = copy.deepcopy(c)
     
  • 相关阅读:
    Find the Smallest K Elements in an Array
    Count of Smaller Number
    Number of Inversion Couple
    Delete False Elements
    Sort Array
    Tree Diameter
    Segment Tree Implementation
    Java Programming Mock Tests
    zz Morris Traversal方法遍历二叉树(非递归,不用栈,O(1)空间)
    Algorithm about SubArrays & SubStrings
  • 原文地址:https://www.cnblogs.com/steven9898/p/11329349.html
Copyright © 2011-2022 走看看