zoukankan      html  css  js  c++  java
  • 赋值、浅拷贝以及深拷贝的区别

    字符串赋值

    >>>
    >>> str1 = 'standby'
    >>> 
    >>> str2 = str1
    >>> 
    >>> print str1==str2, str1 is str2
    True True
    >>> 
    >>> id(str1)
    139792206350496
    >>> id(str2)
    139792206350496
    >>> 

    补充

    >>> 
    >>> a = 'standby'
    >>> b = 'standby'
    >>> 
    >>> a == b
    True
    >>> a is b
    True
    >>> 
    >>> id(a)
    139792206350496
    >>> id(b)
    139792206350496
    >>> 

    字符串浅拷贝方式一

    >>> 
    >>> import copy
    >>> str1 = 'standby'
    >>> 
    >>> str2 = copy.copy(str1)
    >>> 
    >>> print str1==str2, str1 is str2
    True True
    >>> 
    >>> id(str1)
    139792206350496
    >>> id(str2)
    139792206350496
    >>> 

    字符串浅拷贝方式二

    >>> 
    >>> str1 = 'standby'
    >>> 
    >>> str2 = str1[:]
    >>> 
    >>> print str1==str2, str1 is str2
    True True
    >>> 
    >>> id(str1)
    139792206350496
    >>> id(str2)
    139792206350496
    >>> 
    

    字符串深拷贝

    >>> 
    >>> import copy
    >>> str1 = 'standby'
    >>> 
    >>> str2 = copy.deepcopy(str1)
    >>> 
    >>> print str1==str2, str1 is str2
    True True
    >>> 
    >>> id(str1)
    139792206350496
    >>> id(str2)
    139792206350496
    >>> 
    

    列表赋值

    >>> 
    >>> list1 = [1, 2, [1, 2]]
    >>> 
    >>> list2 = list1
    >>> 
    >>> print list1==list2, list1 is list2
    True True
    >>> 
    >>> id(list1)
    139792206344992
    >>> id(list2)
    139792206344992
    >>> 

    补充

    >>> 
    >>> list1 = [1, 2, ['a', 'c']]
    >>> list2 = [1, 2, ['a', 'c']]
    >>> 
    >>> list1 == list2
    True
    >>> list1 is list2
    False
    >>> 
    >>> id(list1)
    139792206356704
    >>> id(list2)
    139792206348088
    >>> 

    列表浅拷贝方式一

    >>> 
    >>> import copy
    >>> list1 = [1, 2, [1, 2]]
    >>> 
    >>> list2 = copy.copy(list1)
    >>> 
    >>> print list1==list2, list1 is list2
    True False
    >>> 
    >>> 
    >>> id(list1)
    139792206344920
    >>> id(list2)
    139792206356560
    >>> 
    

    列表浅拷贝方式二

    >>> 
    >>> list1 = [1, 2, [1, 2]]
    >>> 
    >>> list2 = list1[:]
    >>> 
    >>> print list1==list2, list1 is list2
    True False
    >>> 
    >>> id(list1)
    139792206356704
    >>> id(list2)
    139792206344992
    >>> 
    

      

    列表深拷贝

    >>> 
    >>> import copy
    >>> list1 = [1, 2, 3, 4]
    >>> 
    >>> list2 = copy.deepcopy(list1)
    >>> 
    >>> print list1==list2, list1 is list2
    True False
    >>> 
    >>> id(list1)
    139792206344992
    >>> id(list2)
    139792206344920
    >>> 

    浅拷贝情况下的修改

    >>> 
    >>> import copy
    >>> list1 = [1, 2, ['a', 'c']]
    >>> 
    >>> list2 = copy.copy(list1)
    >>> print list1==list2, list1 is list2
    True False
    >>> id(list1)
    139792206358720
    >>> id(list2)
    139792206359080
    >>> 
    >>> list2[2].append('k')
    >>> print list2,list1
    [1, 2, ['a', 'c', 'k']] [1, 2, ['a', 'c', 'k']]
    >>> id(list1)
    139792206358720
    >>> id(list2)
    139792206359080
    >>> 
    

      

    深拷贝情况下的修改

    >>> 
    >>> import copy
    >>> list1 = [1, 2, ['a', 'c']]
    >>> 
    >>> list2 = copy.deepcopy(list1)
    >>> print list1==list2, list1 is list2
    True False
    >>> id(list1)
    139792206344920
    >>> id(list2)
    139792206358720
    >>> 
    >>> list2[2].append('k')
    >>> print list2,list1
    [1, 2, ['a', 'c', 'k']] [1, 2, ['a', 'c']]
    >>> id(list1)
    139792206344920
    >>> id(list2)
    139792206358720
    >>> 
    

      

     

    作者:Standby一生热爱名山大川、草原沙漠,还有妹子
    出处:http://www.cnblogs.com/standby/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    BZOJ1085 SCOI2005 骑士精神【IDA* 启发式迭代加深】
    BZOJ1690 Usaco2007 Dec 奶牛的旅行 【01分数规划】
    SPOJ104 Highways 【矩阵树定理】
    BZOJ1597土地购买 【斜率优化DP】
    【模板】NTT
    【模板】FFT
    BZOJ3196 Tyvj1730 二逼平衡树 【树套树】 【线段树套treap】
    POJ3696 The Windy's 【网络流】
    POJ2728 Desert King 【最优比率生成树】
    BZOJ5298 CQOI2018 交错序列 【DP+矩阵快速幂优化】*
  • 原文地址:https://www.cnblogs.com/standby/p/8322307.html
Copyright © 2011-2022 走看看