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)
     
  • 相关阅读:
    innerHTML与innerText区别
    HTML5中的数据集dataset和自定义属性data-*
    HTTP协议
    Javascript 中的 && 和 || 使用小结
    JavaScript 实现回文解码
    sublime中用less实现css预编译
    jQuery事件绑定的四种方法
    前端学习过程中需要看的书籍
    Echarts学习宝典
    Vue插槽
  • 原文地址:https://www.cnblogs.com/steven9898/p/11329349.html
Copyright © 2011-2022 走看看