深浅copy

1,先看赋值运算。

l1 = [1,2,3,['barry','alex']]
l2 = l1 l1[0] = 111
print(l1) # [111, 2, 3, ['barry', 'alex']]
print(l2) # [111, 2, 3, ['barry', 'alex']] l1[3][0] = 'wusir'
print(l1) # [111, 2, 3, ['wusir', 'alex']]
print(l2) # [111, 2, 3, ['wusir', 'alex']]

对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。

2,浅拷贝copy。

#同一代码块下:
l1 = [1, '太白', True, (1,2,3), [22, 33]]
l2 = l1.copy()
print(id(l1), id(l2)) # 2713214468360 2713214524680
print(id(l1[-2]), id(l2[-2])) # 2547618888008 2547618888008
print(id(l1[-1]),id(l2[-1])) # 2547620322952 2547620322952 # 不同代码块下:
>>> l1 = [1, '太白', True, (1, 2, 3), [22, 33]]
>>> l2 = l1.copy()
>>> print(id(l1), id(l2))
1477183162120 1477183162696
>>> print(id(l1[-2]), id(l2[-2]))
1477181814032 1477181814032
>>> print(id(l1[-1]), id(l2[-1]))
1477183162504 1477183162504

对于浅copy来说,只是在内存中重新创建了开辟了一个空间存放一个新列表,但是新列表中的元素与原列表中的元素是公用的。

3,深拷贝deepcopy。

# 同一代码块下
import copy
l1 = [1, 'alex', True, (1,2,3), [22, 33]]
l2 = copy.deepcopy(l1)
print(id(l1), id(l2)) # 2788324482440 2788324483016
print(id(l1[0]),id(l2[0])) # 1470562768 1470562768
print(id(l1[-1]),id(l2[-1])) # 2788324482632 2788324482696
print(id(l1[-2]),id(l2[-2])) # 2788323047752 2788323047752 # 不同代码块下
>>> import copy
>>> l1 = [1, '太白', True, (1, 2, 3), [22, 33]]
>>> l2 = copy.deepcopy(l1)
>>> print(id(l1), id(l2))
1477183162824 1477183162632
>>> print(id(0), id(0))
1470562736 1470562736
>>> print(id(-2), id(-2))
1470562672 1470562672
>>> print(id(l1[-1]), id(l2[-1]))
1477183162120 1477183162312

对于深copy来说,列表是在内存中重新创建的,列表中可变的数据类型是重新创建的,列表中的不可变的数据类型是公用的。

最新文章

  1. Cookie和Session的区别
  2. Eclipse 中文的设置
  3. 大话JS面向对象之开篇万物皆对象------(ATM取款机引发的深思)
  4. pascal闪电入门系列目录
  5. 简单的gulpfile.js参数配置
  6. HTML的基本代码第一课
  7. JavaScript日期集合(今日,昨日,本周一,周末 ,月初,月末)
  8. jQuery 中 data 方法的实现原理
  9. maven学习笔记(基本的命令和概念)
  10. VNC 抓取远程桌面
  11. zencart技术联盟交流群
  12. jquery获取iframe中的dom对象
  13. cocos2d-x3.0+Eclipse配置说明
  14. openstack第1天
  15. [认证授权] 5.OIDC(OpenId Connect)身份认证授权(扩展部分)
  16. REST风格框架实战:从MVC到前后端分离(附完整Demo)
  17. 解决@ResponseBody注解返回的json中文乱码问题
  18. .net问号的作用
  19. 代码生成工具更新--快速生成Winform框架的界面项目
  20. 20175320 2018-2019-2 《Java程序设计》第7周学习总结

热门文章

  1. sdm 使用阿里云域名申请 Let’s Encrypt 通配符 域名证书
  2. 给mysql数据添加一个只拥有一张表的权限
  3. 自学jquery,下午实现前后台交互--成为牛逼的女程序员
  4. 深入理解Spring的容器内事件发布监听机制
  5. 16.3Sum Closest (Two-Pointers)
  6. jquery实现全选,取消,反选的功能&实现左侧菜单
  7. 集群监控之 —— ipmi操作指南
  8. 1014_C语言的文法
  9. Java设计模式(9)——观察者模式
  10. 使用JFinal框架连接数据库,实现注册、登录功能