python copy与deepcopy (拷贝与深拷贝)
copy与deepcopy
python 中的copy与deepcopy是内存数据的操作,但是两个函数有一定的区别。
1.copy

import copy
list = [1, [4, 5, 6], 2, 3]
list1 = copy.copy(list) print id(list) print id(list[1])
print id(list1)
print id(list1[1]) list[2] = 100
list[1][0] = 44
print list
print list1 结果:
46925320
46912776
46967368
46912776
[1, [44, 5, 6], 100, 3]
[1, [44, 5, 6], 2, 3]

经过copy操作的得两个list,list1拥有两个同的地址(46925320和46967368),修改list时不会影响list1的值,但是 list中间的子列表[4,5,6]在list和list1中有相同的地址46912776,所以在修改list中的子列表会影响到list1中的子列表。
2.deepcopy

import copy
list = [1, [4, 5, 6], 2, 3]
list2 = copy.deepcopy(list) print id(list)
print id(list[1])
print id(list2)
print id(list2[1]) list[2] = 100
list[1][0] = 44
print list
print list2 结果:
59508232
59495688
59509384
59508168
[1, [44, 5, 6], 100, 3]
[1, [4, 5, 6], 2, 3]

经过deepcopy的list与list2用有不用的地址59508232,59509384,其中的子列表页拥有不同的地址, 所以不论怎样修改list都不用影响到list2。
结论:
经过copy操作的两个数据对象拥有不同的得地址空间 ,但是这个数据对象如果是内嵌了其他的复杂数据对象,这个内嵌的数据对象在
两个数据对象中拥有相同的地址空间,修改其中的值会互相印象。经过deepcopy的操作的不管是内层还是外层数据对象都拥有不同的地址空间,修改其中的值不会对两个对象都造成影响
python copy与deepcopy (拷贝与深拷贝)的更多相关文章
- Python copy and deepcopy
Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deep ...
- python copy和deepcopy
Python FAQ2:赋值.浅拷贝.深拷贝的区别? 发表于 2014-08-15 | 分类于 Lang.-Python | 在写Python过程中,经常会遇到对象的拷贝,如果不理解浅拷 ...
- python学习笔记3---浅拷贝和深拷贝,file操作
import copy a=[1,2,3,['a','b']] b=a c= copy.copy(a)---浅拷贝 d=copy.deepcopy(a)---深拷贝 file操作: python 文件 ...
- Python深复制浅复制or深拷贝浅拷贝
1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.(比深拷贝更加节省内存)2. copy.deepcopy 深拷贝 拷贝对象及其子对象 用一个简单的例子说明如下: >& ...
- 一入python深似海--浅拷贝与深拷贝
python中有一个模块copy,deepcopy函数用于深拷贝,copy函数用于浅拷贝. 要理解浅拷贝,必须先弄清楚python中的引用. 引用 Python中一切都是对象,变量中存放的是对象的引用 ...
- Python copy对象(copy与deepcopy)
Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deep ...
- 从python中copy与deepcopy的区别看python引用
讨论copy与deepcopy的区别这个问题要先搞清楚python中的引用.python的内存管理. python中的一切事物皆为对象,并且规定参数的传递都是对象的引用.可能这样说听起来比较难懂,对比 ...
- Python里的赋值 拷贝 深拷贝
import copy a = [1, 2, 3, 4, ['a', 'b']] #原始对象 b = a #赋值,传对象的引用 c = copy.copy(a) #对象拷贝,浅拷贝 d = copy. ...
- PythonStudy1——Python 值拷贝 浅拷贝 深拷贝
拷贝:对值进行复制的过程 # 值拷贝:应用场景最多 ls = [1, 'abc', [10]] ls1 = ls # ls1直接将ls中存放的地址拿过来 # ls内部的值发生任何变化,ls1都会随 ...
随机推荐
- 题解 [CQOI2015]任务查询系统
题面 解析 首先,我们考虑下暴力的做法: 每次将一个任务的重要度加入到它的区间中, 询问的时候就直接加前\(k\)大. 然而,这样肯会炸的(都说了是暴力了). 其实,我们可以转化一下区间修改(因为区间 ...
- vue css采用别名引入背景图
在vue css中采用别名引入 背景图片,可以在前面加一个波浪号 css 属性中: background: url("~@/assets/xxx.jpg") Webpack 会将以 ...
- C# 列排序
private void button2_Click(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns. ...
- 【Java Web】IDEA如何创建及配置Web项目(多图)
正文之前 在学习Java Web时,第一个遇到的问题就是如何创建或配置Web项目了,今天,就用IntelliJ IDEA 来进行Web项目配置: 创建Web项目 配置web项目 正文 创建Web项目 ...
- 【Python网络】网络协议篇
OSI七层协议 互联网协议按照功能不同分为OSI七层 或 TCP/IP五层 或 TCP/IP四层 每层运行常见物理设备 TCP/IP五层模型讲解 每层都运行特定的协议,越往上越靠近用户,越往下越靠近硬 ...
- 二进制上的数位dpPOJ 3252
Round number POJ - 3252 题目大意:一个"round number" 数的定义是,将它转化成2进制后,0的个数大于等于1的个数,要求的就是在[s,f]范围内& ...
- Java_GUI小游戏--FlappyBird 橡树鸟
本文讲解的是一款来自独立游戏开发者Dong Nguyen所开发的游戏FlappyBird,也叫橡树鸟 四个类代码: package Gary; import java.awt.*; import ja ...
- 读redux源码总结
redux介绍 redux给我们暴露了这几个方法 { createStore, combineReducers, bindActionCreators, applyMiddleware, compos ...
- 黑马lavarel教程---13、分页
黑马lavarel教程---13.分页 一.总结 一句话总结: - lavarel里面的分页操作和tp里面的分页操作几乎是一模一样的 - 控制器:$data=Lesson::paginate(2); ...
- HearthBuddy的狂野和休闲模式来回切换
表现1 配置是标准,休闲模式 然后一直重复提示 select desire deck select causal mode 表现2 配置是狂野,休闲模式 然后一直提示 切换到狂野 切换到标准 把模式切 ...