python使用笔记25--深拷贝、浅拷贝
2024-09-07 19:59:58
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有影响,是浅拷贝
最新文章
- Android系列:res之shape制作
- C#高级编程笔记 Day 4, 2016年9月 12日(接口)
- php中echo(),print(),print_r()之间的区别
- C++ 开篇
- 激活神器 KMSAuto Net 2015 v1.3.8
- myeclipse打红叉
- 使用shell从DB2数据库导出数据
- [HIHO1041]国庆出游(DFS, bitset)
- flv视频播放器代码
- js的数据处理记录
- std::ofstream由二进制流写文件的问题
- UICollectionView 讲解-备
- Android 中如何使用动画
- GDG shanghai programming one hour by JavaScript
- MariaDB的安装与启动
- centos查看自启动服务
- nodeJS之crypto模块公钥加密及解密
- OpenModelica中simulate的用法
- 配置hive元数据数据库
- HDU-1002.大数相加(字符串模拟)