版权声明:本文为博主原创文章,未经博主允许不得转载。

  1. >>> mylist1 = [1, 2, 3, 4]
  2. >>> myl = mylist1
  3. >>> myl
  4. [1, 2, 3, 4]
  5. >>> mylist1[0] = 5
  6. >>> mylist1
  7. [5, 2, 3, 4]
  8. >>> myl
  9. [5, 2, 3, 4]
>>> mylist1 = [1, 2, 3, 4]
>>> myl = mylist1
>>> myl
[1, 2, 3, 4]
>>> mylist1[0] = 5
>>> mylist1
[5, 2, 3, 4]
>>> myl
[5, 2, 3, 4]

这个就是浅复制

浅复制仅仅只是复制了对对象的引用,即 mylist1 和 myl 指向的是同一个对象,所以如果改变了该对象的元素的话,则 mylist1 和 myl 所指向的对象都会改变,因为实际上就是同一个对象

  1. >>> id(mylist1)
  2. 202009976
  3. >>> id(myl)
  4. 202009976
>>> id(mylist1)
202009976
>>> id(myl)
202009976

可以看出两者指向的对象在内存中的地址是相同的,即是同一个对象

  1. >>> import copy
  2. >>> mylist2 = [5, 6, 7, 8]
  3. >>> myl2 = copy.deepcopy(mylist2)
  4. >>> mylist2[0] = 9
  5. >>> mylist2
  6. [9, 6, 7, 8]
  7. >>> myl2
  8. [5, 6, 7, 8]
>>> import copy
>>> mylist2 = [5, 6, 7, 8]
>>> myl2 = copy.deepcopy(mylist2)
>>> mylist2[0] = 9
>>> mylist2
[9, 6, 7, 8]
>>> myl2
[5, 6, 7, 8]

这个就是深复制

  1. >>> id(mylist2)
  2. 200662512
  3. >>> id(myl2)
  4. 202007336
>>> id(mylist2)
200662512
>>> id(myl2)
202007336

而深复制后的两个变量则指向的是两个不同的对象,可以把这两个对象理解为张得一模一样的双胞胎,虽然很像,但实际上是两个不同的人,所以其中一个人发生了改变(如受伤了)也不会影响到另一个人

  1. >>> id(mylist3[0])
  2. 30909144
  3. >>> id(myl3[0])
  4. 30909144
  5. >>> id(mylist3[3])
  6. 200634696
  7. >>> id(myl3[3])
  8. 202008136
  9. >>> mylist3 = [1, "a", 3, [4, 5, 6], [[7, 8, 9]]]
  10. >>> myl3 = copy.deepcopy(mylist3)
  11. >>> id(mylist3[1])
  12. 31110016
  13. >>> id(myl3[1])
  14. 31110016
>>> id(mylist3[0])
30909144
>>> id(myl3[0])
30909144
>>> id(mylist3[3])
200634696
>>> id(myl3[3])
202008136
>>> mylist3 = [1, "a", 3, [4, 5, 6], [[7, 8, 9]]]
>>> myl3 = copy.deepcopy(mylist3)
>>> id(mylist3[1])
31110016
>>> id(myl3[1])
31110016

但是如果 mylist3 和 myl3 的元素指向的是同一个 『不可变』 的对象时,则 他们指向的仍然是同一个对象, 如 1 和 "a"

最新文章

  1. 30天C#基础巩固------了解委托,string练习
  2. 为Autodesk Viewer添加自定义工具条
  3. Postgresql 帐号密码修改方法
  4. wicket基础应用(1)--使用wicket对表单中的数据进行验证
  5. winform学习之----Directory
  6. GridView 分页方法
  7. 使用Vagrant machine
  8. Angular - - form.FormController、ngModel.NgModelController
  9. java字节数组格式化为十六进制字符串
  10. C++实验指导
  11. Java多线程-概念与原理
  12. ☆ [POI2007] ZAP-Queries 「莫比乌斯反演」
  13. DOTween的基本用法
  14. ps: 图层样式;
  15. InnoDB存储引擎的 B+ 树索引
  16. 为啥我做的RFM模型被人说做错了,我错哪了?
  17. 在IDEA中 SFTP 进行发布操作
  18. 亲手安装RabbitMq 3.7.2 并安装Trace插件
  19. 2019年华南理工大学程序设计竞赛(春季赛) B 修仙时在做什么?有没有空?可以来炼丹吗?(思维建图搜索)
  20. ADF系列-3.VO的查询

热门文章

  1. 北京Uber优步司机奖励政策(3月26日)
  2. 流式断言器AssertJ介绍
  3. Ruby 基础教程1-3
  4. git服务器搭建及eclipse使用git
  5. python基础之变量和简单数据类型
  6. Javascript打印网页局部的实现方案
  7. keepalived+nginx实现高可用+tomcat
  8. lintcode172 删除元素
  9. 使用js跳转手机站url的若干注意点
  10. Ubuntu 16.04 安装显卡驱动后循环登录和无法设置分辨率的一种解决方案