精华内容
下载资源
问答
  • python中copy和deepcopy区别
    2019-06-05 20:56:56

    deepcopy(深复制),即将被复制对象完全再复制一遍作为独立的新个体单独存在。所以改变原有被复制对象不会对已经复制出来的新对象产生影响。

    而等于(=)赋值,并不会产生一个独立的对象单独存在,他只是将原有的数据块打上一个新标签, 所以当其中一个标签被改变的时候,数据块就会发生变化,另一个标签也会随之改变。

    而 copy(浅复制)要分两种情况进行讨论:

    1)当浅复制的值是不可变对象(数值,字符串,元组)时和“等于赋值”的情况一样,对象的 id 值与浅复制原来的值相同。

    2)当浅复制的值是可变对象(列表和元组)时会产生一个“不是那么独立的对象”存在。有两种情 况:

    第一种情况:复制的 对象中无 复杂 子对象,原来值的改变并不会影响浅复制的值,同时浅复制的值改变也并不会影响原来的值。原来值的 id 值与浅复制原来的值不同。

    第二种情况:复制的对象中有 复杂 子对象 (例如列表中的一个子元素是一个列表),如果不改变其中复杂子对象,浅复制的值改变并不会影响原来的值。但是改变原来的值 中的复杂子对象的值 会影响浅复制的值。

    对于简单的 object,例如不可变对象(数值,字符串,元组),用shallow copy 和 deep copy 没区别。复杂的 object, 如 list 中套着 list 的情况,shallow copy 中的 子 list,并未从原 object 真的「独立」出来。也就是说,如果你改变原 object 的子 list 中的一个元素,你的 copy 就会跟着一起变。这跟我们直觉上对「复制」的理解不同。

    更多相关内容
  • Python学习过程会遇到许多问题,最近对copy和deepcopy略感困惑,下面对其进行解答,需要的朋友可以参考。
  • python中copy和deepcopy详细区别

    千次阅读 2020-08-31 09:05:44
    python中copy和deepcopy copy仅拷贝对象本身,不会对其中的子对象进行拷贝,对子对象进行修改也会随着修改 deepcopy是真正意义上的复制,新开辟一块空间。 copy 对于不可变类型(元组等)为浅拷贝,对于可变类型(列表...

    python中copy和deepcopy

    1. 在 python 中,标识一个对象唯一身份的是:对象的id(内存地址),对象类型,对象值。
    2. deepcopy是真正意义上的复制,深拷贝,被复制对象完全复制一遍作为独立的新个体,新开辟一块空间。
    3. 等于赋值浅拷贝,不会产生独立对象,只是对原有数据块打上新标签,其中一个标签改变,数据块就会变化。
    4. copy仅拷贝对象本身,浅拷贝不会对其中的子对象进行拷贝,对子对象进行修改也会随着修改,
    5. 对于不可变类型(元组、数值,字符串等)为浅拷贝,对象的id值与浅复制原来的值相同
    6. 对于可变类型(列表、字典等)为深拷贝
      1. 复制的对象中无复杂子对象,即列表中不嵌套列表,原来值的改变并不会影响浅复制的值,同时浅复制的值改变也并不会影响原来的值。原来值的id值与浅复制原来的值不同
      2. 复制的对象中有复杂子对象 (例如列表中的一个子元素是一个列表)如果改变复杂子对象的值(列表中的值)会影响浅复制的值。
    a = [1,2,3,[4,5],1]
    b = a
    c = copy.copy(a)
    d = copy.deepcopy(a)
    
    a.append(9)
    a[3].append(6)
    
    print(a) 	#[1, 2, 3, [4, 5, 6], 1, 9]
    print(b)	#[1, 2, 3, [4, 5, 6], 1, 9]
    print(c)	#[1, 2, 3, [4, 5, 6], 1]
    print(d)	#[1, 2, 3, [4, 5], 1]
    
    print(id(a))	#4594148288
    print(id(b))	#4594148288
    print(id(c))	#4594455328
    print(id(d))	#4592688496
    
    
    x = 'Hello World'
    y = x
    z = copy.copy(x)
    w = copy.deepcopy(x)
    print(id(x)) #4617118576
    print(id(y)) #4617118576
    print(id(z)) #4617118576
    print(id(w)) #4617118576
    
    
    
    
    展开全文
  • python中copy和deepcopy详解

    千次阅读 2022-05-29 11:35:56
    python中标识一个对象唯一身份的是:对象的id(内存地址),对象类型,对象值。 deepcopy是真正意义上的复制,深拷贝,被复制对象完全复制一遍作为独立的新个体,新开辟一块空间。 浅拷贝,不会产生独立对象,等于赋值...

    python中标识一个对象唯一身份的是:对象的id(内存地址),对象类型,对象值。

    deepcopy是真正意义上的复制,深拷贝,被复制对象完全复制一遍作为独立的新个体,新开辟一块空间。

    浅拷贝,不会产生独立对象,等于赋值,只是对原有数据块打上新标签,其中一个标签改变,数据块就会变化。浅拷贝等于赋值,也可以通过copy实现,copy仅拷贝对象本身,浅拷贝不会对其中的子对象进行拷贝,如果对子对象进行修改,拷贝结果也会随着修改。

    • 复制的对象中无复杂子对象,即列表中不嵌套列表,原来值的改变并不会影响浅复制的值,同时浅复制的值改变也并不会影响原来的值。原来值的id值与浅复制原来的值不同。
    • 复制的对象中有复杂子对象 (例如列表中的一个子元素是一个列表)如果改变复杂子对象的值(列表中的值)会影响浅复制的值。
    import copy
    a = [1,2,3,[4,5],1]
    b = a
    c = copy.copy(a)
    d = copy.deepcopy(a)
    
    a.append(9)
    a[3].append(6)
    
    print(a) 	#[1, 2, 3, [4, 5, 6], 1, 9]
    print(b)	#[1, 2, 3, [4, 5, 6], 1, 9]
    print(c)	#[1, 2, 3, [4, 5, 6], 1]
    print(d)	#[1, 2, 3, [4, 5], 1]
    
    print(id(a))	#4594148288
    print(id(b))	#4594148288
    print(id(c))	#4594455328
    print(id(d))	#4592688496
    
    
    x = 'Hello World'
    y = x
    z = copy.copy(x)
    w = copy.deepcopy(x)
    print(id(x)) #4617118576
    print(id(y)) #4617118576
    print(id(z)) #4617118576
    print(id(w)) #4617118576
    
    # 对于不可变类型(元组、数值,字符串等)为浅拷贝,对象的id值与浅复制原来的值相同
    # 对于可变类型(列表、字典等)为深拷贝,
    
    展开全文
  • python中copydeepcopy区别

    千次阅读 2019-03-27 16:18:56
    赋值、copy.copy()、copy.deepcopy()三者之间有差异,差异体现在父类是不是不可变类型还是可变类型,父类里面有没有包含可变类型的子类。
    前提:

      copy与deepcopy都是copy模块中,使用的时候需要实现导入

    import copy
    
    a = [1, 2]
    b = a
    c = copy.copy(a)
    d = copy.deepcopy(a)
    print(id(a), id(b), id(c), id(d))
    """
    结果:
    139844334513480 139844334513480 139844334516296 139844334515272
    """
    
    import copy
    
    a = 22
    b = a
    c = copy.copy(a)
    d = copy.deepcopy(a)
    print(id(a), id(b), id(c), id(d))
    """
    结果为:
    10911072 10911072 10911072 10911072
    """
    

    从这里我们可以看出:

    1.赋值语句:

    赋值,并不会产生一个独立的对象单独存在,他只是将原有的数据块打上一个新标签,所以当其中一个标签被改变的时候,数据块就会发生变化,另一个标签也会随之改变。

    2. 对于不可变类型(数值,字符串,元组):

    浅复制、深复制和“等于赋值”的情况一样,对象的id值与原来的值相同,都是将对象指向同一个引用。

    3. 对于可变类型(列表和字典):

    import copy
    
    a = [1, 2, [1, 2]]
    b = a
    c = copy.copy(a)
    d = copy.deepcopy(a)
    print(a, b, c, d)
    print(id(a), id(b), id(c), id(d))
    
    a[0] = 2
    print(a, b, c, d)
    print(id(a), id(b), id(c), id(d))
    
    a[2][0] = 5
    print(a, b, c, d)
    print(id(a), id(b), id(c), id(d))
    """
    结果:
    [1, 2, [1, 2]] [1, 2, [1, 2]] [1, 2, [1, 2]] [1, 2, [1, 2]]
    140636610149704 140636610149704 140636610152520 140636610151496
    [2, 2, [1, 2]] [2, 2, [1, 2]] [1, 2, [1, 2]] [1, 2, [1, 2]]
    140636610149704 140636610149704 140636610152520 140636610151496
    [2, 2, [5, 2]] [2, 2, [5, 2]] [1, 2, [5, 2]] [1, 2, [1, 2]]
    140636610149704 140636610149704 140636610152520 140636610151496
    """
    

    1)浅复制copy.copy(): 只拷贝父对象,不会拷贝对象的内部的子对象。

    • 第一种情况(无复杂子对象): 原来值的改变并不会影响浅复制的值,同时浅复制的值改变也并不会影响原来的值。原来值的id值与浅复制原来的值不同。
    import copy
    
    a = [1, 2, [1, 2]]
    c = copy.copy(a)
    print(id(a), id(c))
    print(id(a[2]), id(c[2]))
    """
    结果:
    140070937910600 140070937921608
    140070937920328 140070937920328
    """
    
    • 第二种情况(有复杂子对象): (例如列表中的一个子元素是一个列表),如果不改变其中复杂子对象,浅复制的值改变并不会影响原来的值。 但是改变原来的值中的复杂子对象的值会影响浅复制的值, 因为他们子对象的引用是一样的。

    **2) 深复制deepcopy.copy():**拷贝父对象以及拷贝对象的内部的子对象。

    import copy
    
    a = [1, 2, [1, 2]]
    c = copy.deepcopy(a)
    print(id(a), id(c))
    print(id(a[2]), id(c[2]))
    
    展开全文
  • 1、复制不可变数据类型(int、string、tuple)的时候,无论是copy(浅拷贝)、deepcopy(深拷贝)或者“=” 的地址都与原对象id地址一样 代码: import copy # 不可变类型(int、string、tuple) a = "你好" b ...
  • python中copy和deepcopy

    2020-12-29 08:46:42
    2. copy.deepcopy 深拷贝 拷贝对象及其子对象一个很好的例子:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->import copya = [1, 2, 3...
  • Python中copy和deepcopy区别

    千次阅读 2018-05-29 15:28:11
    copy()和deepcopy()是Python语言copy模块的两个method,copy()其实是与deep copy相对的shallow copy。对于简单的object,用shallow copy和deep copy区别。复杂的Object,如list套着list的情况,shallow copy中...
  • 前言copy()与deepcopy()之间的区分必须要涉及到python对于数据的存储方式。深复制被复制对象完全再复制一遍作为独立的新个体单独存在。所以改变原有被复制对象不会对已经复制出来的新对象产生影响。浅复制并不会产生...
  • copy仅拷贝对象本身,而不对的子对象进行拷贝,故对子对象进行修改也会随着修改。 子对象就是列表的列表(套娃行为) deepcopy是真正意义上的复制,即从新开辟一片空间。我们经常说的复制实际上就是deepcopy. ...
  • 请简述赋值, 深拷贝浅拷贝的区别?(python中如何拷贝一个对象?...浅拷贝:lili2的内存地址不同,但是子对象的内存地址相同, 因此,原始数据改变 , 子对象也改变.\深拷贝(import copy, eg: li3=copy.deepcopy(...
  • copy()与deepcopy()之间的主要区别python对数据的存储方式。python2,需要import copy模块。python3,直接可以使用copy()方法,但deepcopy()还是需要导入copy模块 >首先直接上结论: —–深复制,...
  • 背景 为什么要研究这个问题?...因为之前学习C++的时候对深浅复制以及指针、引用,有过系统的学习,所以猜想python实现=的方式,应该是创建了引用。但这需要去了解它的实现方式才能证实 看官方解释 官方关
  • importcopyd={'name':['An','Assan']}c=d.copy()dc=copy.deepcopy(d)d['name']=['an']printcprintdprintdc结果如下:[python]view plaincopy{'name':['An','Assan']}{'name':['an']}{'name':['An','...
  • python中copy.copy和copy.deepcopy

    千次阅读 2021-07-04 00:10:15
    1、浅copy时,1级的值个数永远不会变化,但是如果1级不是具体的值,是集合、列表等时2级的子值会变化 2、深deepcopy时,b则会有自己的独立空间,不会再受a任何影响 一个例子就搞清楚 1 2 3 4 ...
  • 主要介绍了Python-copy()与deepcopy()区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • python中对于对象的拷贝分为浅拷贝(copy)深拷贝(deepcopy)两种方式。其中浅拷贝由“=”完成。而深拷贝由copy模块中deepcopy()函数担任。 浅拷贝深拷贝的区别是: 浅拷贝只是将原对象在内存引用地址拷贝过来了...
  • python中copy()和deepcopy()详解

    千次阅读 2021-03-17 15:29:15
    **首先直接上结论: —–我们寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在。所以改变原有被复制对象不会...这就我们寻常意义上的复制有所不同了。**对于简单的 object,用 s...
  • 赋值(浅浅的拷贝,所有都不拷贝,单纯使用相同内存) c++一样,python赋值操作就是单纯的将两个变量指向同一款内存单元 a = [1,2,3] ...python3,直接可以使用copy()方法,但deepcopy(...
  • python copy.deepcopy()深入解读

    千次阅读 多人点赞 2020-09-17 20:52:55
    copy.deepcopy()的用法是将某一个变量的值赋值给另一个变量(此时两个变量地址不同),因为地址不同,所以这两个变量互不干扰。 大家可以猜猜下面代码第四行输出什么值 a = [1, 2, 3] d = a # ad的地址相同, 看第5...
  • python中对于对象的拷贝分为浅拷贝(copy)深拷贝(deepcopy)两种方式。其中浅拷贝由“=”完成。而深拷贝由copy模块中deepcopy()函数担任。 ** 浅拷贝深拷贝的区别是:浅拷贝只是将原对象在内存引用地址拷贝过来...
  • Python中copy()和deepcopy()的区别

    千次阅读 2019-02-24 20:26:19
    同样是copy,二者有什么不同呢今天我们就一探究竟!!! python——赋值与深浅拷贝  初学编程的小伙伴都会对于深浅拷贝的... 在详细的了解python中赋值、copy和deepcopy之前,我们还是要花一点时间来了解一下p...
  • 最近在实习,boss给布置了一个python的小任务,学习过程发现copy()和deepcopy()这对好基友实在是有点过分,搞的博主就有点傻傻分不清啊,但是呢本着一探到底的精神,还是要查资料搞清楚这对好基友的区别。...
  • import copy class ListNode: def __init__(self, x): self.val = x self.next = None def __repr__(self): return str(self.val) list1 = [ListNode(1), ListNode(2)] list2 = list1.copy() list3 = list1[:] ...
  • 概要:昨天遇到一个关于copydeepcopy的问题,平时还真没注意,因为做...讨论copydeepcopy区别这个问题要先搞清楚python中的引用、python的内存管理。 python中的一切事物皆为对象,并且规定参数的传递都是对象的
  • python3,直接可以使用copy()方法,但deepcopy()还是需要导入copy模块 下面以python2为例: import copy list = ['beijing','tianjin','hebei','wuhan','shandong'] list_copy = copy.copy(list) list[0] = '...
  • 1、对于数值、字符串元组,不同的复制方式没有区别,复制后,=/copy/deepcopy的id不变。改变原对象的内容,不会改变新对象的内容。 2、对于数值、字符串元组,只能通过赋值来修改这些对象,修改后id会发生变化。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,514
精华内容 12,205
热门标签
关键字:

python中copy和deepcopy区别