浅深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]]

最新文章

  1. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十三)台风模块
  2. FineReport中如何进行Informix数据库连接
  3. tp框架实现防止非法登录
  4. [读书笔记] Head First 设计模式
  5. symfony2 安装并创建第一个页面
  6. Tarjan+模板
  7. String 中的秘密
  8. ArcGIS for Silverlight 地图卷帘
  9. WPF Template模版之寻找失落的控件【三】
  10. crash部分命令用法
  11. Azure IoT 技术研究系列5-Azure IoT Hub与Event Hub比较
  12. JVM学习笔记三:垃圾收集器及内存管理策略
  13. Leetcode题解(30)
  14. JavaScript函数调用模式
  15. Fiddler修改请求和响应
  16. New UWP Community Toolkit - ImageEx
  17. .net core web api 与httpclient发送和接收文件及数据
  18. 每天学点SpringCloud(三):自定义Eureka集群负载均衡策略
  19. 计算平面面积和斜面面积-ArcGIS案例学习笔记
  20. PCA 降维

热门文章

  1. Redis 操作帮助类
  2. Linux共享文件夹映射到Windows磁盘
  3. [LeetCode] 151. Reverse Words in a String 翻转字符串中的单词
  4. mybatis对实体的引用必须以 ';' 分隔符结尾
  5. C1128节数超过对象文件格式限制: 请使用 /bigobj 进行编译
  6. 浅谈Java中的Condition条件队列,手摸手带你实现一个阻塞队列!
  7. 【Python开发】C和Python之间的接口实现
  8. 阿里云使用Docker部署工单系统(redmine)
  9. linux服务器通过X11实现图形化界面显示
  10. 10 Servlet+Http+Request对象