python使用笔记25--深拷贝、浅拷贝
1、循环删除list
1 ll = [1,1,32,4,3,2,3,2,4,6,4,5,6,7,8] 2 for i in ll: 3 if i % 2 !=0: 4 ll.remove(i) 5 print(ll)
执行结果如下:
该段代码有问题,循环删除list,会导致下标错乱
解决办法1,代码如下:
1 import copy 2 3 ll = [1,1,32,4,3,2,3,2,4,6,4,5,6,7,8] 4 ll2 = copy.deepcopy(ll)#深拷贝 5 for i in ll2: 6 if i % 2 !=0: 7 ll.remove(i) 8 print(ll)
执行结果如图所示:
2、深拷贝、浅拷贝
深拷贝是指的拷贝之后,操作不影响原有变量
浅拷贝是指拷贝之后,对新的变量进行操作会影响原有变量
copy出来之后,如果内存地址不变,肯定是浅拷贝
copy.deepcopy 肯定是深拷贝,而且只有这一种是深拷贝
copy.copy()
list.copy()
dict.copy()这三种可能地址不一样,但是也是浅拷贝
1 a = [1, 32, 4, 3, 2, 3, 2, 4, 6, 4, 5, 6, 7, 8, {'key1': 'value1'}] 2 a1 = a #浅拷贝 3 4 a2 = copy.deepcopy(a)#深拷贝 5 6 a3 = a.copy()#浅拷贝 7 8 a4 = copy.copy(a)#浅拷贝 9 10 a.pop(1) 11 a[-1]['key1'] = 'xiaoxiaolin' 12 13 print(id(a),a) 14 print(id(a1),a1) 15 print(id(a2),a2) 16 print(id(a3),a3) 17 print(id(a4),a4)
执行结果如图所示:
a和a1内存地址一样,肯定是浅拷贝
a和a2内存地址不一样,且操作a对a2没有影响,是深拷贝
a和a3,a4内存地址不一样,但是深层次的操作a,对a3,a4有影响,是浅拷贝