zoukankan      html  css  js  c++  java
  • python 深拷贝 浅拷贝

      1 # 不可变对象
      2 import copy
      3 
      4 number1 = 1
      5 stringA = 'A'
      6 turple1 = (1, 2, 3, 4, 5)
      7 
      8 # 可变对象
      9 dict1 = {"key": 1}
     10 list1 = [1, 2]
     11 
     12 # 嵌套对象
     13 # 外层不可变 内层不可变
     14 turple2 = (turple1, stringA)
     15 # 外层不可变 内层可变
     16 turple3 = (list1, dict1)
     17 # 外层可变  内层不可变
     18 list2 = [turple1, stringA]
     19 # 外层可变  内层可变
     20 list3 = [dict1, list1]
     21 
     22 # 浅拷贝 简单对象
     23 # 引用
     24 # number2 = copy.copy(number1)
     25 # print(id(number1), id(number2))
     26 # 引用
     27 # stringA_2 = copy.copy(stringA)
     28 # print(id(stringA), id(stringA_2))
     29 # 引用
     30 # turple1_2 = copy.copy(turple1)
     31 # print(id(turple1), id(turple1_2))
     32 # 新对象
     33 # dict1_2 = copy.copy(dict1)
     34 # print(id(dict1), id(dict1_2))
     35 # 新对象
     36 # list1_2 = copy.copy(list1)
     37 # print(id(list1), id(list1_2))
     38 '''
     39 总结: 浅拷贝 简单对象
     40 不可变对象是引用
     41 可变对象是新对象
     42 '''
     43 
     44 
     45 # 外层引用  内层引用
     46 # turple2_2 = copy.copy(turple2)
     47 # print(id(turple2),"--",id(turple2[0]),id(turple2[1]))
     48 # print(id(turple2_2),"--",id(turple2_2[0]),id(turple2_2[1]))
     49 
     50 # 外层引用  内层引用
     51 # turple3_2 = copy.copy(turple3)
     52 # print(id(turple3),"--",id(turple3[0]),id(turple3[1]))
     53 # print(id(turple3_2),"--",id(turple3_2[0]),id(turple3_2[1]))
     54 
     55 # 外层新对象 内层引用
     56 # list2_2 = copy.copy(list2)
     57 # print(id(list2),"--",id(list2[0]),id(list2[1]))
     58 # print(id(list2_2),"--",id(list2_2[0]),id(list2_2[1]))
     59 
     60 # 外层新对象 内层引用
     61 # list3_2 = copy.copy(list3)
     62 # print(id(list3),"--",id(list3[0]),id(list3[1]))
     63 # print(id(list3_2),"--",id(list3_2[0]),id(list3_2[1]))
     64 
     65 '''
     66 总结:浅拷贝 嵌套对象
     67     内层都是引用,
     68         外层对象不可变,外层引用
     69         外层对象可变,外层新对象
     70 '''
     71 
     72 # 深拷贝 简单对象
     73 # 引用
     74 # number2 = copy.deepcopy(number1)
     75 # print(id(number1), id(number2))
     76 # 引用
     77 # stringA_2 = copy.deepcopy(stringA)
     78 # print(id(stringA), id(stringA_2))
     79 # 引用
     80 # turple1_2 = copy.deepcopy(turple1)
     81 # print(id(turple1), id(turple1_2))
     82 # 新对象
     83 # dict1_2 = copy.deepcopy(dict1)
     84 # print(id(dict1), id(dict1_2))
     85 # 新对象
     86 # list1_2 = copy.deepcopy(list1)
     87 # print(id(list1), id(list1_2))
     88 '''
     89 总结: 深拷贝 简单对象
     90 不可变对象是引用
     91 可变对象是新对象
     92 与浅拷贝结果一样
     93 '''
     94 
     95 
     96 # 外层引用  内层引用
     97 # turple2_2 = copy.deepcopy(turple2)
     98 # print(id(turple2),"--",id(turple2[0]),id(turple2[1]))
     99 # print(id(turple2_2),"--",id(turple2_2[0]),id(turple2_2[1]))
    100 
    101 # 外层新对象  内层新对象
    102 # turple3_2 = copy.deepcopy(turple3)
    103 # print(id(turple3),"--",id(turple3[0]),id(turple3[1]))
    104 # print(id(turple3_2),"--",id(turple3_2[0]),id(turple3_2[1]))
    105 
    106 # 外层新对象 内层引用
    107 # list2_2 = copy.deepcopy(list2)
    108 # print(id(list2),"--",id(list2[0]),id(list2[1]))
    109 # print(id(list2_2),"--",id(list2_2[0]),id(list2_2[1]))
    110 
    111 # 外层新对象 内层新对象
    112 # list3_2 = copy.deepcopy(list3)
    113 # print(id(list3),"--",id(list3[0]),id(list3[1]))
    114 # print(id(list3_2),"--",id(list3_2[0]),id(list3_2[1]))
    115 
    116 '''
    117 总结:深拷贝 嵌套对象
    118     内层是可变对象,内外层都是新对象,
    119     内层是不可变对象,内层都是引用
    120         此时
    121         外层对象不可变,外层引用
    122         外层对象可变,外层新对象
    123 '''
    124 '''
    125 综上:
    126 浅拷贝 
    127     简单对象
    128         不可变对象是引用
    129         可变对象是新对象
    130     嵌套对象
    131         内层都是引用,
    132         外层对象不可变,外层引用
    133         外层对象可变,外层新对象
    134         
    135 深拷贝 
    136     简单对象
    137         不可变对象是引用
    138         可变对象是新对象
    139     嵌套对象
    140         内层是可变对象,内外层都是新对象,
    141         内层是不可变对象,内层都是引用
    142             此时
    143             外层对象不可变,外层引用
    144             外层对象可变,外层新对象
    145         
    146 简单对象不受copy,deepcopy的影响,
    147 不可变对象结果都是引用
    148 可变对象结果都是新对象
    149 
    150 对于嵌套对象
    151 copy不是递归处理的,因为内层都是引用,没有递归到简单对象
    152 的处理逻辑
    153 外层可以当做简单对象理解,可变对象深拷贝,不可变引用
    154 
    155 deepcopy递归处理,受到内层对象影响
    156         内层可变,内外层都是深拷贝(即使外层不可变)
    157         内层不可变,内层引用
    158             此时外层按照简单对象处理
    159         
    160 
    161 
    162 
    163 '''
  • 相关阅读:
    HDU 6040 Hints of sd0061 —— 2017 Multi-University Training 1
    HDU 6038 Function —— 2017 Multi-University Training 1
    HDU 6034 Balala Power! —— Multi-University Training 1
    使用python将excel数据导入数据库
    python reload(sys)找不到,name 'reload' is not defined
    伯乐在线资讯URL
    伯乐在线文章URL
    慕课网python分布式爬虫打造搜索引擎视频中爬取伯乐网文章
    javascript HTML DOM 简单介绍
    css样式大全
  • 原文地址:https://www.cnblogs.com/huaida/p/15779697.html
Copyright © 2011-2022 走看看