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.nucmc.com/ true Python学习笔记之浅仿制和深仿制 http://www.nucmc.com/show-18-1110-1.html report 5577.5 在Python中目标的仿制有三种一般的仿制,浅仿制,深仿制,那么他们有什么差异呢
TAG:Python 浅仿制 深仿制
本站欢迎任何方式的转载,但请有必要注明出处,尊重别人劳动成果
转载请注明: 文章转载自:BETWAY官网网 http://www.nucmc.com/show-18-1110-1.html
BETWAY官网网 Copyright 2012-2014 www.nucmc.com All rights reserved.(晋ICP备13001436号-1)