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