Python学习日记(六) 浅深copy
2024-10-20 18:05:58
浅深copy即完全复制一份和部分复制一份
浅深copy在列表数据量较大时不建议使用,比较消耗内存资源
1.赋值运算
l1 = [1,'s',[1,2,3]]
l2 = l1
print(id(l1),id(l2)) #34103880 34103880
l1[2][1] = 'h'
print(id(l1),id(l2)) #34103880 34103880
l1和l2指向的是相同的内存地址
2.浅copy
l1 = [1,'s',[4,5,6,'s','h']]
l2 = l1.copy()
print(id(l1),id((l2))) #5988936 6475464
print(id(l1[0]),id(l2[0])) #8791394136912 8791394136912
print(id(l1[2][0]),id(l2[2][0])) #8791410914224 8791410914224
浅copy即开辟一个新的内存空间放一个新的列表,但是里面的元素两边都是公用的
3.深copy
import copy
l1 = [1,'s',False,(2,3,4),{1,2,3},['a','b']]
l2 = copy.deepcopy((l1))
print(id(l1),id(l2)) #42180488 42179272
print(l1,l2)
#不可变数据类型
print(id(l1[0]),id(l2[0])) #8791394136912 8791394136912
print(id(l1[1]),id(l2[1])) #37970136 37970136
print(id(l1[2]),id(l2[2])) #8791410383216 8791410383216
print(id(l1[3]),id(l2[3])) #39259880 39259880
#可变数据类型
print(id(l1[4]),id(l2[4])) #42293064 42293512
print(id(l1[5]),id(l2[5])) #42685064 42685192
深copy是开辟一个新的列表内存空间,当列表中有不可变数据类型的元素时则与原列表共用,当列表有可变数据类型的元素时则会重新创建一个内存地址
面试题:
l1 = [1, 2, 3, 4, ['alex']]
l2 = l1[::]
l1[-1].append(666)
print(l2) #[1, 2, 3, 4, ['alex', 666]]
最新文章
- 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十三)台风模块
- FineReport中如何进行Informix数据库连接
- tp框架实现防止非法登录
- [读书笔记] Head First 设计模式
- symfony2 安装并创建第一个页面
- Tarjan+模板
- String 中的秘密
- ArcGIS for Silverlight 地图卷帘
- WPF Template模版之寻找失落的控件【三】
- crash部分命令用法
- Azure IoT 技术研究系列5-Azure IoT Hub与Event Hub比较
- JVM学习笔记三:垃圾收集器及内存管理策略
- Leetcode题解(30)
- JavaScript函数调用模式
- Fiddler修改请求和响应
- New UWP Community Toolkit - ImageEx
- .net core web api 与httpclient发送和接收文件及数据
- 每天学点SpringCloud(三):自定义Eureka集群负载均衡策略
- 计算平面面积和斜面面积-ArcGIS案例学习笔记
- PCA 降维
热门文章
- Redis 操作帮助类
- Linux共享文件夹映射到Windows磁盘
- [LeetCode] 151. Reverse Words in a String 翻转字符串中的单词
- mybatis对实体的引用必须以 ';' 分隔符结尾
- C1128节数超过对象文件格式限制: 请使用 /bigobj 进行编译
- 浅谈Java中的Condition条件队列,手摸手带你实现一个阻塞队列!
- 【Python开发】C和Python之间的接口实现
- 阿里云使用Docker部署工单系统(redmine)
- linux服务器通过X11实现图形化界面显示
- 10 Servlet+Http+Request对象