在python中,对象赋值实际上是对象的的引用,当创建一个对象,然后把它赋值给另外一个变量的时候,python没有拷贝这个对象,而只是拷贝了这个对象的引用,多以就出现了浅复制,即复制后原对象改变后,复制出来的对象也会改变,要防止复制出来的对象改变,就要使用深复制

python复制三种方式

(1)直接赋值,传递对象的引用而已。原始列表改变,被赋值的对象也会做相同改变

 list1 = [1,2,'a',[4,'ss']]
list2 = list1
print(list2) #result;[1, 2, 'a', [4, 'ss']]
print(list3)
list1.append(10)
print(list1,list2) #[1, 2, 'a', [4, 'ss'], 10] [1, 2, 'a', [4, 'ss'], 10]

(2)copy浅复制,没有拷贝子对象,所以原始数据改变,子对象也会发生变化

  注:copy浅复制与list[:]效果一致

1 list1 = [1,2,'a',[4,'ss']]
2 import copy
3 list2 = copy.copy(list1)
4 print(list2) #[1, 2, 'a', [4, 'ss']]
5 list1.append('c')
6 print(list1,list2) #[1, 2, 'a', [4, 'ss'], 'c'] [1, 2, 'a', [4, 'ss']]
7 list1[3].append(5)
8 print(list1,list2) #里面的子对象被改变了[1, 2, 'a', [4, 'ss', 5], 'c'] [1, 2, 'a', [4, 'ss', 5]]

(3)深拷贝,包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变

 list1 = [1,2,'a',[4,'ss']]
import copy
list2 = copy.deepcopy(list1)
print(list2) #[1, 2, 'a', [4, 'ss']]
list1.append('c')
print(list1,list2) #list2始终没有变[1, 2, 'a', [4, 'ss'], 'c'] [1, 2, 'a', [4, 'ss']]
list1[3].append(5)
print(list1,list2) #list2始终没有变[1, 2, 'a', [4, 'ss', 5], 'c'] [1, 2, 'a', [4, 'ss']]

最新文章

  1. title换行
  2. wex5 实战 用户点评与提交设计技巧
  3. 在iOS开发过程中你遇到这个问题了么?
  4. Centos 7 通过挂载系统光盘搭建本地yum仓库的方法
  5. C语言 百炼成钢18
  6. shuffle ----- mr 董西城
  7. UVa11090 Going in Cycle!!
  8. js判断是否为ie的方法
  9. Android中布局文件中使用onClick属性
  10. JAVA之旅(三)——数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想
  11. 实例说明Java中的null
  12. c/c++ 多线程 多个线程等待同一个线程的一次性事件
  13. tensorflow会话控制-【老鱼学tensorflow】
  14. php发送短信验证码
  15. CopyFromScreen在屏幕缩放情况下需要做处理
  16. 洛谷P3613 睡觉困难综合征(LCT,贪心)
  17. NodeJS下的Mongodb操作
  18. Zookeeper学习之路 (二)集群搭建
  19. python中tornado的第一个例子
  20. Keywords Search---hdu2222(AC自动机 模板)

热门文章

  1. Python:更改字典的key
  2. 问题5:如何快速找到多个字典中的公共键(key)
  3. 【转】Pro Android学习笔记(十八):用户界面和控制(6):Adapter和AdapterView
  4. TModJS:目录
  5. 3 K8s安裝ELK+filebeat
  6. Django框架之第三篇模板语法
  7. SpringMvc之参数绑定注解详解之三
  8. centos6.5安装tomcat7.0教程(二)
  9. Angular14 Angular相关命令
  10. bos物流面试题