精华内容
下载资源
问答
  • 可以发现直接使用"="进行浅复制,一旦拷贝源对象改变,那么拷贝...但是如果采用np.copy()函数,可以实现深复制,此时拷贝后对象原来对象已经没有关联。 转载于:https://www.cnblogs.com/xlqtlhx/p/8244596.html...

    可以发现直接使用"="进行浅复制,一旦拷贝源对象改变,那么拷贝的全部就会改变。但是如果采用np.copy()函数,可以实现深复制,此时拷贝后的对象与原来对象已经没有关联。

    转载于:https://www.cnblogs.com/xlqtlhx/p/8244596.html

    展开全文
  • Python字典的深复制与浅复制

    千次阅读 2018-04-23 10:47:03
    直接使用“=”是浅复制,比如有一个字典a,然后令b=a,这样话当你改变b之后,a内容也会一并改变。 2. 深复制 Python有一个copy库可以用于深复制。 import copy a = {"name":"Leo", &...

    1. Python字典浅复制

    直接使用“=”是浅复制,比如有一个字典a,然后令b=a,这样的话当你改变b之后,a的内容也会一并改变。

    2. 深复制

    Python有一个copy库可以用于深复制。

    import copy
    a = {"name":"Leo", "age":19}
    b = copy.deepcopy(a)

    这样,更改b的内容就不会影响a,更改a的内容也不会影响b。

    展开全文
  • 附上一篇不错PYTHON深浅复制文: ... [code="java"] # -*- coding:utf-8 -*- ...# 深复制与浅复制 import copy list1 = [1,2,['a','b']] list2 = list1 list3 = copy.copy(list1) lis...
    附上一篇不错的说PYTHON深浅复制的文:
    http://www.cnblogs.com/Eva-J/p/5534037.html

    # -*- coding:utf-8 -*-
    # 深复制与浅复制
    import copy
    list1 = [1,2,['a','b']]
    list2 = list1
    list3 = copy.copy(list1)
    list4 = copy.deepcopy(list1)
    list1.append(3)
    list1[2].append('c')

    print 'list1 = ',list1
    print 'list2 = ',list2
    print 'list3 = ',list3
    print 'list4 = ',list4

    # result:
    # list1 = [1, 2, ['a', 'b', 'c'], 3]
    # list2 = [1, 2, ['a', 'b', 'c'], 3]
    # list3 = [1, 2, ['a', 'b', 'c']]
    # list4 = [1, 2, ['a', 'b']]

    展开全文
  • 一、深复制与浅复制 列表是Python中自带的一种数据结构,在使用列表时,拷贝操作不可避免,下面简单讨论一下列表的深复制(拷贝)与浅复制 首先看代码: l1 = [5, 4, 3, 2, 1] # 用两种方法实现对列表l1的拷贝 l2...

    一、深复制与浅复制

    • 列表是Python中自带的一种数据结构,在使用列表时,拷贝操作不可避免,下面简单讨论一下列表的深复制(拷贝)与浅复制

    首先看代码:

    l1 = [5, 4, 3, 2, 1]
    # 用两种方法实现对列表l1的拷贝
    l2 = l1
    l3 = l1[:]
    print(l1) # [5, 4, 3, 2, 1]
    print(l2) # [5, 4, 3, 2, 1]
    print(l3) # [5, 4, 3, 2, 1]
    
    #修改l1
    l1[0] = 9
    print(l1) # [9, 4, 3, 2, 1]
    print(l2) # [9, 4, 3, 2, 1]
    print(l3) # [5, 4, 3, 2, 1]

    我们发现修改l1的第一个元素后,l2的第一个元素跟着改变,而l3并没有发生变化。Python内置函数id()可以返回元素的地址,那么我们使用这个函数来看一下三个列表的地址:

    print(id(l1)) # 2927957162504
    print(id(l2)) # 2927957162504
    print(id(l3)) # 2927923243528

    从结果来看,l1和l2地址是一样的,也就是说l1和l2指向的是同一块内存区域,显然,通过 l2 = l1 操作,l1和l2都成了指向同一块内存地址的“指针”,也就是说这个操作是为l1取了一个别名,也可以说l2是l1的一个引用。用一张图来解释:

    那么修改l1也就是在修改l2:

    接下来看一下创建l3的过程,l3 = l1[:] ,这是将l1进行切片,并将切片后的列表拷贝到l3所指向的内存区域,同样看图:

    也就是说l1和l3指向不同的内存区域,那么修改l1并不会影响到l3:

    通俗的来讲,像l2这种,拷贝出来的对象和原对象的地址相同,为浅复制,像l3这种,分配新的内存空间并拷贝原始内容的,拷贝出来的对象和原对象的地址不同,为深复制

    二、复制列表内元素的浅复制

    • 在复制列表中的所有元素的时候,进行浅复制

    看一个比较有意思的东西,看代码:

    l1 = [1,2,3,[1,3]]
    l2 = l1[:]
    l1[3][1] = 9
    print(l1) # [1, 2, 3, [1, 9]]
    print(l2) # [1, 2, 3, [1, 9]]

    按照前面的理解,修改l1某个元素后,l2应该不会发生改变,可结果却与我们预想的结果大相径庭,于是,我们不得不思考一下l2深复制到底复制了什么东西。实际上列表其实可以理解为一个“指针”,l1[3]是一个列表元素,l2[3]也是一个列表元素,执行以下代码:

    print(id(l2[3])) # 2014816956232
    print(id(l1[3])) # 2014816956232

    我们发现l1[3]和l2[3]指向的地址是一样的,也就是说在执行 l2 = l1[:] 的时候,将一个地址拷贝了,所以修改l1[3]相当于修改l2[3],所以才会出现上述结果,这更加说明了列表其实就是一个指向一片内存区域的“指针”。那么我们是不是可以说列表l2深复制l1,但是对列表中每个元素进行复制时进行的是浅复制呢?答案显而易见。

    修改l1[3]中的元素:

    三、copy()和deepcopy()

    • copy模块可以帮助我们实现对象的复制操作

    列举一下其他的拷贝列表的方式:

    l4 = l1 * 1
    print(id(l4)) # 2927957916296
    l5 = list(l1)
    print(id(l5)) # 2927957767816
    import copy
    l6 = copy.copy(l1)
    print(id(l6)) # 2927956854024
    l7 = copy.deepcopy(l1)
    print(id(l7)) # 2927958503368

    我们可以看到,这几种拷贝方式所得到的的新对象与原对象的地址都不相同了,并没有按照字面意思(copy进行浅复制,deepcopy进行深复制),那么copy()和deepcopy()究竟有什么区别呢,继续看代码:

    list1 = [1,2,3,[1,3]]
    list2 = list1[:]
    list3 = copy.copy(list1)
    list4 = copy.deepcopy(list1)
    list1[3][0] = 9
    print(list1) # [1, 2, 3, [9, 3]]
    print(list2) # [1, 2, 3, [9, 3]]
    print(list3) # [1, 2, 3, [9, 3]]
    print(list4) # [1, 2, 3, [1, 3]]
    print(id(list1[3])) # 2927923172616
    print(id(list2[3])) # 2927923172616
    print(id(list3[3])) # 2927923172616
    print(id(list4[3])) # 2927967190728

    可以发现copy()和前面提到的用 [:] 进行拷贝没有本质上的区别,对列表中的每个元素进行复制时进行的是浅拷贝,而deepcopy()在复制列表中的每个元素的时候,进行的是深拷贝

    希望本文帮助到大家,感到有所收获就点赞支持一下吧!

    展开全文
  • python浅复制与深复制In python, the assignment operator does not copy the objects, instead, they create bindings between an object and the target. The object, if a collection that is mutable or ...
  • python深复制与浅复制

    2017-03-16 20:44:25
    否则会引发不易发现异常,在进行变量复制时要分清是浅复制还是深复制,变量名内存放是地址, 把一个变量内地址赋值给另一个变量是浅复制,把一个变量内容赋值给另一个变量则为深复制, 如:ll=[1,2,3]  ...
  • 1.我在复制一个数组的时候,使用了如下的...果然如我所想,python的浅复制让你以为你生成了“两个数组”,而实际上你只生成了一个数组。 2.浅复制与深复制 2.1浅复制: 形如: a = [1,2,3] b = a 这种复制方式叫
  • Python深复制与浅复制

    2019-10-17 19:48:49
    1.因为Python万物皆对象C语言区别和java区别! ```swift ```python a = 1 id(1) 53708360 a = 2 id(2) 53675400 2.二维数组思想 其中划分首位地址 ```python A = [[1,2,3],4,5] B = A....
  • python的深拷贝与浅拷贝 引言 前两天在用python写A*算法的时候,被python的深拷贝和浅拷贝恶搞了一番,实际上还是因为没搞清楚哪些是深拷贝,哪些是浅拷贝,现特意写一篇小结,加深理解。 什么是浅拷贝 所谓浅拷贝,...
  • 以下操作会会出现拷贝情况 使用切片[:]操作 使用工厂函数(如list/dir/set) 使用copy模块中copy()函数 对于对象中元素,拷贝就只会使用原始元素引用(内存地址) import copy class Copy_...
  • 第一次遇到这个问题是在大学时期写编译原理大作业时候遇到。但是一直没有用心总结。后来在写野人和传教士,点灯问题求解时候,也因为这个问题调试好长时间,浪费了很多时间。因此,今天总结一下,希望以后能...
  • python 深复制对象Assignment statements in Python do not create copies of objects, they only bind names to an object. For immutable objects, that usually doesn’t make a difference. Python赋值语句...
  • 主要介绍了举例区分Python的浅复制与深复制,是Python入门学习中重要知识,需要朋友可以参考下
  • 1. copy.copy() 拷贝 只拷贝父对象,不会拷贝对象内部子对象。 2. copy.deepcopy() 拷贝 拷贝对象及其子对象 由于在python中对象之间赋值只是引用传递,即多个对象指向同一个地址,如 a=[1,2,3] ...
  • 这里涉及到了深复制和浅复制区别,需要弄清楚栈和堆区分, 因为栈与堆运行速度是数量级差异,而且栈还有可能把数据直接调入寄存器进行读写,又因栈内空间十分有限,所以有了深复制与浅复制,默认浅复制. <深入理解...
  • Python对象的深复制与浅复制

    千次阅读 2012-07-23 13:51:47
    1. copy.copy 拷贝 只拷贝父对象,不会拷贝对象内部子对象。 2. copy.deepcopy 拷贝 拷贝对象及其子对象 用一个简单例子说明如下: >>>import copy >>>a = [1, 2, 3, 4, ['a', 'b', 'c']] >>> b = a ...
  • 感觉有点惊讶,之前一直以为a[:]执行深复制。 test了一下,发现确实如果a中存在可变对象,如list/set/dict等,则对原对象修改,会影响到copy过来值。 a = [{1,2,3}, 1,2] b = a[:]# 修改不可变对象a[2]...
  • Python 复制中的深复制与浅复制

    千次阅读 2014-04-20 15:35:48
    Python中copy返回一个具有相同键-值对字典
  • @Python 欢迎使用Markdown编辑器 ...我们对Markdown编辑器进行了一些功能拓展语法支持,除了标准Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新界面设计 ,将会...
  • copy()方法返回一个新字典,包含键值对原来字典相同,这个方法执行浅复制,因为值本身是原件,而非副本 如上图所示,当替换副本中值时,原件不受影响。然而修改副本中值,原件也将发生变化,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 386
精华内容 154
关键字:

python的深复制与浅复制

python 订阅