<noframes id="5hjpd"><progress id="5hjpd"><form id="5hjpd"></form></progress>

    <noframes id="5hjpd">

    <span id="5hjpd"><progress id="5hjpd"><progress id="5hjpd"></progress></progress></span>
      <noframes id="5hjpd">
      <ins id="5hjpd"><sub id="5hjpd"><rp id="5hjpd"></rp></sub></ins>
      <del id="5hjpd"><big id="5hjpd"></big></del>
      <track id="5hjpd"></track>

      Python學習筆記之淺拷貝和深拷貝

      導語 在Python中對象的復制有三種一般的復制,淺拷貝,深拷貝,那么他們有什么區別呢

      一般的復制

      1. #encoding:utf-8 
      2. #定義一個嵌套集合 
      3. lista=[1,2,3,[4,5,6,[7,8,9]]] 
      4.  
      5. listb=lista 
      6. #分別打印出 lista和listb的地址值 
      7. print id(lista) #4511103096 
      8. print id(listb) #4511103096 
      9.  
      10. #修改lista中的內容,listb中的內容也會跟著修改 
      11.  
      12. lista[0]=0 
      13. print lista #[0, 2, 3, [4, 5, 6, [7, 8, 9]]] 
      14. print listb #[0, 2, 3, [4, 5, 6, [7, 8, 9]]] 

        通過以上實踐會發現,復制操作就是將lista在內存中指向的地址,也讓listb指向他,本身并沒有在內存中創建地址。

      淺拷貝

      1. #encoding:utf-8 
      2. #定義一個嵌套集合 
      3. import copy 
      4. lista=[1,2,3,[4,5,6,[7,8,9]]] 
      5. #使用copy模塊中copy方法 
      6. listb=copy.copy(lista) 
      7.  
      8. print id(lista) #4396231640 
      9.  
      10. print id(listb) #4396231712 
      11.  
      12. #發現lista和listb在內存中的地址有區別, 
      13. #打印元素中的第一個元素的地址值 
      14. print id(lista[0])#140666751466536 
      15.  
      16. print id(listb[0])#140666751466536 
      17.  
      18. #元素的地址值是一樣的,是不是意思就是,改變lista中的第一個元素, 
      19. # listb中的也要改變呢 
      20.  
      21. lista[0]=0 
      22.  
      23. print lista #[0, 2, 3, [4, 5, 6, [7, 8, 9]]] 
      24.  
      25. print listb #[1, 2, 3, [4, 5, 6, [7, 8, 9]]] 
      26.  
      27. #結果發現,竟然沒有跟著lista一起改變,為什么呢,因為使用了淺拷貝唄 
      28. #我們在打印下lista[0]和listb[0]的地址 
      29. print id(lista[0])  #140666751466560 
      30.  
      31. print id(listb[0])  #140666751466536 
      32.  
      33. #會發現lista[0]重新指向內存中的其他地址 
      34.  
      35.  
      36. #這時候可以通過以上的方法,修改lista[3],lista[3]也是一個list 
      37.  
      38. print id(lista[3])#4499779240 
      39.  
      40. print id(listb[3])#4499779240 
      41.  
      42. #修改lista[3]中第一個元素呢 
      43.  
      44. lista[3][0]=0 
      45.  
      46. print lista #[0, 2, 3, [0, 5, 6, [7, 8, 9]]] 
      47.  
      48. print listb #[0, 2, 3, [0, 5, 6, [7, 8, 9]]] 
      49.  
      50. #發現修改lista[3][0]元素的值,listb[3][0]也會跟著改變 

        根據以上實踐說明,淺拷貝對對象中對象沒有拷貝。

        深拷貝

      1. #encoding:utf-8 
      2.     #定義一個嵌套集合 
      3.     import copy 
      4.     lista=[1,2,3,[4,5,6,[7,8,9]]] 
      5.  
      6.     #深拷貝功能是在淺拷貝上做的加強,所以具備淺拷貝的功能 
      7.     listb=copy.deepcopy(lista) 
      8.  
      9.     lista[3][0]=0 
      10.  
      11.     print lista #[1, 2, 3, [0, 5, 6, [7, 8, 9]]] 
      12.  
      13.     print listb #[1, 2, 3, [4, 5, 6, [7, 8, 9]]] 
      14.  
      15.     #深拷貝會解決修改lista[3][0]值不會影響listb中的值 
      16.  
      17.     #再來修改下第三層列表中元素是不是也完成拷貝 
      18.  
      19.     lista[3][3][0]=0 
      20.  
      21.     print lista  #[1, 2, 3, [0, 5, 6, [0, 8, 9]]] 
      22.  
      23.     print listb  #[1, 2, 3, [4, 5, 6, [7, 8, 9]]] 
      24.  
      25.     #沒有受到任何影響 

       

      http://www.randomwithlife.com/ true Python學習筆記之淺拷貝和深拷貝 http://www.randomwithlife.com/show-18-1110-1.html report <?php echo strlen($content) / 2; ?> 在Python中對象的復制有三種一般的復制,淺拷貝,深拷貝,那么他們有什么區別呢
      TAG:Python 淺拷貝 深拷貝
      本站歡迎任何形式的轉載,但請務必注明出處,尊重他人勞動成果
      轉載請注明: 文章轉載自:愛思資源網 http://www.randomwithlife.com/show-18-1110-1.html

      [前端插件推薦] Plugin

      1 2 3 4
      • jQuery實現逐字逐句顯示插件l-by-l.min.js
      • jQuery帶方向感知的鼠標滑過圖片邊框特效插件
      • jQuery HotKeys監聽鍵盤按下事件keydown插件
      • 響應式無限輪播jQuery旋轉木馬插件
      響應式無限輪播jQuery旋轉木馬插件
      web前端開發
      愛思資源網 Copyright 2012-2014 www.randomwithlife.com All rights reserved.(晉ICP備13001436號-1)
      欧美精品久久久久久久自慰

      <noframes id="5hjpd"><progress id="5hjpd"><form id="5hjpd"></form></progress>

        <noframes id="5hjpd">

        <span id="5hjpd"><progress id="5hjpd"><progress id="5hjpd"></progress></progress></span>
          <noframes id="5hjpd">
          <ins id="5hjpd"><sub id="5hjpd"><rp id="5hjpd"></rp></sub></ins>
          <del id="5hjpd"><big id="5hjpd"></big></del>
          <track id="5hjpd"></track>