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]}