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 (拷贝与深拷贝)的更多相关文章

  1. Python copy and deepcopy

    Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deep ...

  2. python copy和deepcopy

    Python FAQ2:赋值.浅拷贝.深拷贝的区别? 发表于 2014-08-15   |   分类于 Lang.-Python  |   在写Python过程中,经常会遇到对象的拷贝,如果不理解浅拷 ...

  3. python学习笔记3---浅拷贝和深拷贝,file操作

    import copy a=[1,2,3,['a','b']] b=a c= copy.copy(a)---浅拷贝 d=copy.deepcopy(a)---深拷贝 file操作: python 文件 ...

  4. Python深复制浅复制or深拷贝浅拷贝

    1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.(比深拷贝更加节省内存)2. copy.deepcopy 深拷贝 拷贝对象及其子对象 用一个简单的例子说明如下: >& ...

  5. 一入python深似海--浅拷贝与深拷贝

    python中有一个模块copy,deepcopy函数用于深拷贝,copy函数用于浅拷贝. 要理解浅拷贝,必须先弄清楚python中的引用. 引用 Python中一切都是对象,变量中存放的是对象的引用 ...

  6. Python copy对象(copy与deepcopy)

    Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deep ...

  7. 从python中copy与deepcopy的区别看python引用

    讨论copy与deepcopy的区别这个问题要先搞清楚python中的引用.python的内存管理. python中的一切事物皆为对象,并且规定参数的传递都是对象的引用.可能这样说听起来比较难懂,对比 ...

  8. Python里的赋值 拷贝 深拷贝

    import copy a = [1, 2, 3, 4, ['a', 'b']] #原始对象 b = a #赋值,传对象的引用 c = copy.copy(a) #对象拷贝,浅拷贝 d = copy. ...

  9. PythonStudy1——Python 值拷贝 浅拷贝 深拷贝

    拷贝:对值进行复制的过程 # 值拷贝:应用场景最多  ls = [1, 'abc', [10]] ls1 = ls # ls1直接将ls中存放的地址拿过来  # ls内部的值发生任何变化,ls1都会随 ...

随机推荐

  1. 什么是http协议(一)

    http协议是大家在互联网中最为熟悉的协议,只要上网大家都会遇到,但是,很多人被问道什么是http协议,http协议的内容是什么就懵了.这里,我们随便聊聊http协议. 首先,我们说说协议.我一直觉得 ...

  2. Flex 布局是什么?

    Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为 Flex 布局.大理石平台价格 .box{ displ ...

  3. java+批量下载大文件

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...

  4. c++两数组合并算法

    #include <iostream> #define MAXSIZE 100 using namespace std; int combine(int a[],int b[],int c ...

  5. hdu 5761 Rower Bo 微分方程

    Rower Bo Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  6. 9.一次简单的Web作业

    Web作业 <!DOCTYPE html> <!-- 作业描述:由于引用了JQuery库,所以请在联网的时候打开该页面. 本次作业是在上次作业的基础上的进一步完善,上次作业页面预留的 ...

  7. JAVA中java.lang.OutOfMemoryError常见的解决方式

    在开发中我们很多人都遇到过内存溢出的情况,其实内存溢出分几种形式: 1.tomcat中java.lang.OutOfMemoryError: PermGen space异常处理(最常见的) 概念大家可 ...

  8. C. Planning(贪心)

    C. Planning time limit per test 1 second memory limit per test 512 megabytes input standard input ou ...

  9. JavaWeb_(Struts2框架)Struts创建Action的三种方式

    此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...

  10. zookeeper系列(一)zookeeper图形化的客户端工具

    追加一个zookeeper图形化的客户端工具: 1.zookeeper图像化客户端工具的下载地址:https://issues.apache.org/jira/secure/attachment/12 ...