python浅拷贝和深拷贝
>>> import copy >>> a = [0,1,2,[3,4]] >>> b = a # 赋值 >>> c = a[:] #浅拷贝(又叫影子拷贝) >>> d = copy.copy(a) #浅拷贝 >>> e = a.copy() #浅拷贝 >>> f = copy.deepcopy(a) # 深拷贝
#父对象的修改
>>> a.append(10) >>>a [0, 1, 2, [3, 4], 10] >>> b [0, 1, 2, [3, 4], 10] >>> c [0, 1, 2, [3, 4]] >>> d [0, 1, 2, [3, 4]] >>> e [0, 1, 2, [3, 4]] >>> f [0, 1, 2, [3, 4]]
#子对象的修改
>>> a[3].append(5) >>>a [0, 1, 2, [3, 4, 5], 10] >>> b [0, 1, 2, [3, 4, 5], 10] >>> c [0, 1, 2, [3, 4, 5]] >>> d [0, 1, 2, [3, 4, 5]] >>> e [0, 1, 2, [3, 4, 5]] >>> f [0, 1, 2, [3, 4]]
由上面两个例子可以理解为并总结出:
a = b赋值操作:就是将变量a的引用地址拷贝过去,即a的另一个别名;对a或者b的操作是对同一个地址下的元素进行操作,所以返回的结果都是一样的,数值同步。
f = copy.deepcopy()深拷贝:就是将父对象及父对象下的子对象的所有元素值都拷贝过去,对a或者对f的操作都是各自对不同地址下的元素进行操作,互不影响。
c = a[:],a.copy(),copy.copy(a)都是浅拷贝的形式:将变量a内的所有父对象的值拷贝过去,但是对于父对象内的子对象值(例如列表内的各个元素值)没有进行拷贝,只是拷贝了列表所指向的地址值。
所以介于赋值操作和深拷贝之间:对于a或者c的父对象的操作,a和c是同深拷贝一样互不影响的;对于子对象的操作,a和c是同赋值操作一样,数值同步的。
转载于:https://www.cnblogs.com/hongdanni/p/10458796.html
python浅拷贝和深拷贝相关推荐
- Python 浅拷贝和深拷贝 - Python零基础入门教程
目录 一.Python 浅拷贝和深拷贝前言 二.Python 普通的变量赋值 三.Python 浅拷贝和深拷贝 1.Python 浅拷贝 copy 2.Python 深拷贝 deepcopy 3.Py ...
- Python浅拷贝与深拷贝
Python浅拷贝与深拷贝 Python中拷贝 Python中的赋值号=并不是真正的拷贝,这仅仅是一个引用.参照这篇博客 .必要的时候,我们需要复制值,而不是使用引用.Python中有两种方式:浅拷贝 ...
- python函数方法里面用浅复制深复制_图解 Python 浅拷贝与深拷贝
Python 中的赋值语句不会创建对象的拷贝,仅仅只是将名称绑定至一个对象.对于不可变对象,通常没什么差别,但是处理可变对象或可变对象的集合时,你可能需要创建这些对象的 "真实拷贝" ...
- python——浅拷贝和深拷贝
这一篇的内容主要是关于python中浅拷贝和深拷贝的原理.博主的其他内容可以在其他专栏中查看,更多内容还在更新中. 变量赋值的底层逻辑 变量赋值机制 num1 = [1,2,3] num2 = num ...
- Python浅拷贝、深拷贝与防止数据被篡改
目录 一.概念解读 1.1.Python对象 1.2.可变与不可变对象 1.3.引用 二.逐步深入:引用赋值 2.1.不可变对象的引用赋值 三.主旨详解:浅拷贝.深拷贝 3.1.浅拷贝 3.1.1.不 ...
- 二、Python浅拷贝和深拷贝
1.深拷贝和浅拷贝 1.1.基本概念 浅拷贝(shallow copy ):拷贝父对象,不会拷贝对象的内部子对象 A shallow copy creates a new object whi ...
- python怎么避免浅拷贝_详谈Python中的深拷贝和浅拷贝
在平时工作中,经常涉及到数据的传递,在数据传递使用过程中,可能会发生数据被修改的问题.为了防止数据被修改,就需要在传递一个副本,即使副本被修改,也不会影响原数据的使用.为了生成这个副本,就产生了拷贝. ...
- python中的引用、浅拷贝和深拷贝
在python中,有一句话:"一切皆为对象,一切皆为对象的引用",所以 只要记住这句话就很容易清楚python中的引用.浅拷贝和深拷贝了. 1. 引用 python中的引用是经常使 ...
- Python赋值、浅拷贝、深拷贝
一.赋值(assignment) >>> a = [1, 2, 3] >>> b = a >>> print(id(a), id(b), sep= ...
最新文章
- 试用过期_过期的护肤品彩妆你都是怎么处理的呢?这样做,可以省一大笔钱
- rails3和4获取当前url
- JS中双引号单引号,转义字符问题!!
- 远程控制利器TeamViewer使用教程(图)
- python 对象转dict_如何将python dict对象转换为java等效对象?
- 软件分析与设计:分析什么?如何设计?
- 二次扩增产物条带弥散_PCR实验操作常见解决方法
- Python找出列表的中只出现一次的元素
- fiddler如何伪造referrer_Fiddler抓包神器带你遨游网络,叱咤风云,为所欲为
- 如何划分和细化有限元网格,才能提高计算的精度和速度?
- Leetcode练习 快慢指针
- 元宵大师的Python股票量化分析工具QTYX-版本更新说明
- Win10 安装虚拟机ROS
- 在数据库应用系统中数据库的开发
- Django项目 no signature found for builtin错误原因
- 狗汪汪玩转嵌入式 -- WINKHUB 边信道攻击 (NAND Glitch)
- 子曾经曰过,当心累了的时候,身体也会垮台。
- 黑客会用什么方式攻击你的服务器?
- excel 闪退应急打开文件的方法
- 怎么卸载mac上的软件