在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']]

python中深复制和浅复制区别的更多相关文章

  1. python中深copy,浅copy与赋值语句的区别

    以下详细讲解:python深复制,浅复制与赋值语句的区别 1. '='赋值语句,常规复制只是将另一个变量名关联到了列表,并不进行副本复制,实例如下: var1=[12,35,67,91,101]var ...

  2. python中深copy,浅copy

    版权声明:本文为博主原创文章,未经博主允许不得转载. >>> mylist1 = [1, 2, 3, 4] >>> myl = mylist1 >>&g ...

  3. Python学习日记之字典深复制与浅复制

    Python中通过copy模块有两种复制(深复制与浅复制) copy 浅复制 复制时只会复制父对象,而不会复制对象的内部的子对象. deepcopy 深复制 复制对象及其子对象 因此,复制后对原dic ...

  4. Java中对象的深复制和浅复制详解

    1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. ⑵ ...

  5. Java中的深复制与浅复制

    1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不 复制它所引用的对象. ...

  6. Java中的clone()----深复制,浅复制

    这篇文章主要介绍了Java中对象的深复制(深克隆)和浅复制(浅克隆) ,需要的朋友可以参考下 1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他 ...

  7. python 深复制和浅复制

    https://www.python-course.eu/python3_deep_copy.php-------------------------------------------------- ...

  8. js中的深复制与浅复制

    前言 所谓深复制与浅复制(深拷贝与浅拷贝),乍一听感觉听高大上,像是一个非常难理解的概念,其实我们平常项目开发都是在用的,只是你可能不知道该怎么叫它的名字而已,就像你听熟了一首歌,就是不知道这首歌叫什 ...

  9. c++深复制与浅复制区别代码示范vs2015-txwtech

    c++深复制与浅复制区别代码示范vs2015-txwtech c++深复制与浅复制区别代码示范 区别: 深复制: CDemo B = A; B.str[0] = 'K';//B对象里面的元素修改后,A ...

  10. js中的深复制和浅复制

    在实际情况中经常会遇到对对象复制的问题.比如在处理项目中的一笔多结构的数据存储或者调用,这个时候你就要对对象(json)进行操作,而不同的操作根据不同的需求来定义.其中最常见最普遍的是对对象的复制,重 ...

随机推荐

  1. 原 requirements.txt 介绍 & 快捷生成

    requirements.txt介绍   requirements.txt 文件 里面记录了当前程序的所有依赖包及其精确版本号.   这个文件有点类似与Rails的Gemfile.其作用是用来在另一台 ...

  2. 如何查看Python 安装位置以及已经安装的库

    如何查看Python 安装位置以及已经安装的库 步骤一: 1. Start 一个command prompt 2. 找到电脑中已经安装的Python 位置: where python 1 打开路径, ...

  3. redis的五种数据类型及应用场景

    前言 redis是用键值对的形式来保存数据,键类型只能是String,但是值类型可以有String.List.Hash.Set.Sorted Set五种,来满足不同场景的特定需求. 本博客中的示例不是 ...

  4. CSS:word-wrap/overflow/transition

    一 自动换行:一个div有固定宽高,如果其内容很长,必须两行以上才能显示完整的时候,有两种情况要留意 1 默认如果其内容都是中文,那么内容是可以自适应,而不会溢出div 2 如果内容除了中文之外,还有 ...

  5. jqgrid--api,官网demo,编辑

    api参考: http://blog.csdn.net/hurryjiang/article/details/7551477 官网demo: http://www.trirand.com/blog/j ...

  6. js实现翻牌效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. C++ 替换字符串内某个字符或子串

    1. 问题描述 string s="abc"; string tmp="1"; 2.解决方案 // tmp 必须为字符串 // 第一个 1 表示 s 中的位置 ...

  8. JAVAWeb SSH框架 利用POI 导出EXCEL,弹出保存框

    导入包这一些不多说,直接贴出关键代码,JSP只要点一个Action链接就行. poi包我是用:poi-3.11-20141221.jar 亲测有效: 效果: Action 类代码: private I ...

  9. crontab简易入门

    前言 crontab是Unix和Linux用于设置周期性被执行的指令,是互联网很常用的技术,很多任务都会设置在crontab循环执行,如果不使用crontab,那么任务就是常驻程序,这对你的程序要求比 ...

  10. python的pip 安装

    python的pip 安装 python有很多好用的包,但是需要的时候一一安装实在是麻烦,还好有pip这么好用的安装工具.所以第一步是安装pip,然后其它软件都so easy! 文章来源:https: ...