首页 > 其他 > 详细

浅拷贝 和 深拷贝

时间:2019-04-26 18:55:18      阅读:106      评论:0      收藏:0      [点我收藏+]
 1  #0 1 2 3 4 5 6 7 8 9 10 11
 2    li = [1,1,2,2,3,3,4,5,6,7,8,9]
 3 #循环一次 #[1,2,2,3,3,4,5,6,7,8,9]
 4            #0 1 2 3 4 5 6 7 8 9 10
 5 for i in li:
 6     if i%2!=0:
 7         li.remove(i)
 8 print(li)
 9 # 运行结果:[1, 2, 2, 3, 4, 6, 8]
10 
11 #循环删除list的时候,都会出现这样的问题
12 #循环的时候,不要删除元素,下标会错乱
13 
14 #解决办法
15 li = [1,1,2,2,3,3,4,5,6,7,8,9]
16 # l2 = li
17 l2 = li[:]
18 print(id(li)) #查看内存地址
19 print(id(l2))
20 # l2 = [1,1,2,2,3,3,4,5,6,7,8,9]
21 for i in l2:
22     if i%2!=0:
23         li.remove(i)
24 print(li)
25 # 运行结果:[2, 2, 4, 6, 8]  正确的
26 
27 #深拷贝   不同的内存地址 不相互影响
28 li = [1,1,2,2,3,3,4,5,6,7,8,9]
29 l2 = li[:]
30 #浅拷贝   指向相同的内存地址 相互影响
31 li = [1,1,2,2,3,3,4,5,6,7,8,9]
32 l2 = li
33 
34 #深拷贝和浅拷贝的区别,浅拷贝不会开辟新的内存地址,深拷贝会开辟新的内存地址
35 
36 import copy
37 d = {name:bai,age:28}
38 #d1 = d  #浅拷贝
39 d1=copy.deepcopy(d) #深拷贝
40 d1[age]=12
41 
42 print(id(d))
43 print(id(d1))
44 print(d)
45 print(d1)
46 运行结果:2962609174280
47 2962610675072
48 {name: bai, age: 28}
49 {name: bai, age: 12}
50 
51 ====================================================================
52 
53 import copy
54 d = {name:bai,age:[3,4,5]}
55 #d1 = d  #浅拷贝
56 d1=copy.copy(d)  #还是浅拷贝  在深入一层的时候就是浅拷贝了
57 d1[age].append(19)
58 print(id(d))
59 print(id(d1))
60 print(d)
61 print(d1)
62 
63 运行结果:1839810967304
64                   1839810967376
65 {name: bai, age: [3, 4, 5, 19]}
66 {name: bai, age: [3, 4, 5, 19]}

 

浅拷贝 和 深拷贝

原文:https://www.cnblogs.com/baiby/p/10775922.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!