python 中的拷贝、浅拷贝与深拷贝
0.序列指什么?
序列类型是指容器内的元素从0开始的索引顺序访问,一次可以访问一个或者多个元素,包括字符串(string)、元组(tuple)、列表(list):
The difference between tuple and list:
Tuple would not be changed, but list would.
>>> a = (1,2,3)
>>> b = [1,2,3]
>>> b.append(4)
>>> a.append(4)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'
1.什么是拷贝?
Copy操作意味着两个在内存中不同的对象,所以对应的id也是不一样的。
>>> ls1 = [1,2,3]
>>> ls2 = ls1[:]
>>> id(ls1),id(ls2)
(140439195044104, 140439195058760)
>>> tp1 = (1,2,3)
>>> tp2 = ls1[:]
>>> id(tp1),id(tp2)
(140439194958816, 140439194958816)
为什么tuple的id没有变化而list的tuple发生了变化了呢?这个是由于Python解释器的实现导致的,由于tuple是immutable的,所以说没有必要在内存里维护多个一样字面意义的tuple,因此Python对于Tuple的Copy操作,实际上是增加了一个Reference Count而已,并没有做真正的Copy,所以ID的返回值是一样的。
这是浅拷贝还是深拷贝?
一般以下所得到的都是浅拷贝:
2.什么是浅拷贝?
>>> c = copy.deepcopy(a)
>>> c[3].append(8)
>>> a,c
((1, 3, 5, [2, 4, 6]), (1, 3, 5, [2, 4, 6, 8]))
4.总结:
考察是不是浅拷贝的方法是两者的容器是否指向同一个地址。
>>> a = (1,3,5,[2,4])
>>> b = a[:]
>>> b[3].append(6)
>>> a,b
((1, 3, 5, [2, 4, 6]), (1, 3, 5, [2, 4, 6]))
3.什么是深拷贝?
深拷贝是指拷贝后序列中的容器也拷贝过去,而不存在引用关系。
浅拷贝是指当序列中包含容器时,拷贝后新序列的容器只是原序列容器的引用
python 中的拷贝、浅拷贝与深拷贝相关推荐
- Python中赋值、浅拷贝、深拷贝
一.赋值 Python中赋值就是对对象的简单引用,这一点与C++不同,如下: a = [1, '123', [12, 'C']] b = a 在上述情况下,a和b是一样的,他们指向同一片内存,b不过是 ...
- python copy函数例子,Python中的拷贝详解
在之前的一篇文章中,我们解释了一下为什么下面的两种方式是不同的: bucket = [[] for _ in range(len(nums)+1)] bucket1 = [[]] * (len(num ...
- 深入浅出理解Java中数组的浅拷贝和深拷贝
深入浅出带你理解Java中数组的浅拷贝和深拷贝 深浅拷贝的区别 深浅拷贝的区别 所谓浅拷贝,一般指的就是对象引用,例如 Teacher teacher = new Teacher(); teacher ...
- Python中list的复制及深拷贝与浅拷贝探究
在Python中,经常要对一个list进行复制.对于复制,自然的就有深拷贝与浅拷贝问题.深拷贝与浅拷贝的区别在于,当从原本的list复制出的list之后,修改其中的任意一个是否会对另一个造成影响,即这 ...
- python数组元素赋值_Python数组中赋值,浅拷贝,深拷贝的区别
要用到的工具 id(a) 函数用于获取对象a的内存地址. a is b 是用来比较 a 和 b 是不是指向同一个内存单元. 1. 直接赋值: 如下图用工具比较后发现直接赋值后两个列表指向同一内存单元. ...
- python中的拷贝
1.赋值: 只是复制了新对象的引用,不会开辟新的内存空间. 2.浅拷贝: 创建新对象,其内容是原对象的引用. 浅拷贝有三种形式:切片操作,工厂函数,copy模块中的copy函数. ...
- 一入python深似海--浅拷贝与深拷贝
python中有一个模块copy,deepcopy函数用于深拷贝,copy函数用于浅拷贝. 要理解浅拷贝,必须先弄清楚python中的引用. 引用 Python中一切都是对象,变量中存放的是对象的引用 ...
- python中如何拷贝一个对象_python题目-----Python里面如何拷贝一个对象?
在Python中,无论是对象赋值,作为为参数传递,作为函数返回值,都是引用传递的.如果需要拷贝对象,需要使用标准库中的copy模块(import copy). 1.浅拷贝 : 使用copy.copy, ...
- Python中深浅拷贝的案例教程
在本节中,您将通过运行Python中的浅拷贝和深拷贝实例来理解copy模块创造副本的不同. 在Python中复制对象 在Python中,我们使用=运算符来创建对象的副本.您可能会认为这会创建一个新对象 ...
- C++ 中的深入浅拷贝和深拷贝
浅拷贝和深拷贝都是相对拷贝构造函数来讲的 下面代码实现浅拷贝, 1 #include <stdio.h> 2 #include <iostream> 3 #include &l ...
最新文章
- java初始化实例化_Java 类初始化和实例化以及多态理解
- maven项目配置Jetty服务器
- Linux find 用法示例
- 华为手机微信网络连接到服务器失败怎么办,微信H5支付在华为手机里报错 网络环境未能通过安全验证,请稍后再试 怎么解决啊 试了好多方法也不行...
- Web Service入门简介(一个简单的WebService示例)
- office 2007 oracle 9,office2007win10版下载
- linux - python
- php 5.5.7.tar.gz,编译 php-5.5.26.tar.gz
- OpenShift 4 之 GitOps(7)用ArgoCD部署Pacman应用集群
- 国家计算机二级access考试试题,全国计算机二级access试题及答案
- CSS浏览器兼容问题
- IS-IS详解(一)——IS-IS基础
- ArcGIS无插件加载(无偏移)天地图
- firewalld 规则配置
- 武汉大学计算机学院2010情景剧,武汉大学金秋情景剧大赛精彩落幕(组图)
- java-poi实现生成word
- 高等数学学习笔记——第八讲——数列极限的性质(2.数列极限的四则运算法则)
- (root用户)bash: ./xx: Permission denied解决方法
- 苹果开放降级_iPhone 突然开放降级...
- 英语基础差的人学计算机,基础差怎么去学好英语口语