zoukankan      html  css  js  c++  java
  • python中的深拷贝和潜拷贝

    >>> a = ['ace',['age',10]]
    >>> b = a[:]
    >>> c = list(a)
    >>> for item in a:
    ...     print(id(item))
    ...     
    140281621219736
    140281621134800
    >>> for item in b:
        print(id(item))
    ...     
    140281621219736
    140281621134800
    >>> for item in c:
        print(id(item))
    ...     
    140281621219736
    140281621134800
    

     看得出,这里的集中拷贝方式都只是类似指针的引用。。改改试试?

    >>> b[0] = 'bog'
    >>> b
    ['bog', ['age', 10]]
    >>> a
    ['ace', ['age', 10]]
    >>> c
    ['ace', ['age', 10]]
    >>> c[0] = 'cat'
    >>> a
    ['ace', ['age', 10]]
    >>> b
    ['bog', ['age', 10]]
    >>> c
    ['cat', ['age', 10]]
    

     艾,变了。在改改列表?

    >>> a
    ['ace', ['age', 10]]
    >>> b
    ['bog', ['age', 10]]
    >>> c
    ['cat', ['age', 10]]
    >>> a[1][1] = 'ago'
    >>> a
    ['ace', ['age', 'ago']]
    >>> b
    ['bog', ['age', 'ago']]
    >>> c
    ['cat', ['age', 'ago']]
    >>> b[1][1] = 'agy'
    >>> a
    ['ace', ['age', 'agy']]
    >>> b
    ['bog', ['age', 'agy']]
    >>> c
    ['cat', ['age', 'agy']]
    >>> c[1][1] = 'cat!'
    >>> a
    ['ace', ['age', 'cat!']]
    >>> b
    ['bog', ['age', 'cat!']]
    >>> c
    ['cat', ['age', 'cat!']]
    

     艾玛,全变了。。。什么情况阿!

    哈哈,来个总结!

    发现,其中列表中  姓名字符串  id都不一样,但是 年龄列表id却都相同。

    这是因为:python中字符串不可以修改,所以在为tom和anny重新命名的时候,会重新创建一个’tom’和’anny’对象,替换旧的’jack’对象。

    这就说明了,浅复制(shallow copy),它复制了对象,但对于对象中的元素,依然使用引用.

    那深拷贝也就是玩玩全全的从内存空间新开辟一个地址存一个副本辣!

    怎么用呢?

    >>> import copy
    >>> d = copy.deepcopy(a)
    >>> for item in a:
    ...     print(id(a))
    ...     
    140281621133432
    140281621133432
    >>> for item in d:
        print(id(item))
    ...     
    140281621219736
    140281621159160
    

     see!不一样了把

  • 相关阅读:
    Python生成器
    字符串匹配——KMP算法
    字符串匹配——Brute-Force 简单匹配算法
    算法笔记--八个常见排序算法总结
    算法笔记--基数排序
    算法笔记--归并排序
    算法笔记--堆排序
    算法笔记--直接选择排序
    算法笔记--快速排序
    算法笔记--冒泡排序
  • 原文地址:https://www.cnblogs.com/Blaxon/p/4602889.html
Copyright © 2011-2022 走看看