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有影响,是浅拷贝

posted @ 2020-06-13 20:50  cjxxl1213  阅读(138)  评论(0编辑  收藏  举报