1.赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。

In [168]: a
Out[168]: [1, 2, 3] In [169]: b=a In [170]: a.append(4) In [171]: a
Out[171]: [1, 2, 3, 4] In [172]: b
Out[172]: [1, 2, 3, 4]

2.浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(copy模块的copy()函数)

In [187]: import copy#copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变

In [188]: a=[1,2,3,4,['a','b']]

In [189]: c=copy.copy(a)

In [190]: a.append(5)

In [191]: a
Out[191]: [1, 2, 3, 4, ['a', 'b'], 5] In [192]: c
Out[192]: [1, 2, 3, 4, ['a', 'b']] In [193]: a[4].append('c') In [194]: a
Out[194]: [1, 2, 3, 4, ['a', 'b', 'c'], 5] In [195]: c
Out[195]: [1, 2, 3, 4, ['a', 'b', 'c']]

3.深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变)(copy模块的deep.deepcopy()函数)

In [196]: import copy

In [197]: a=[1,2,3,4,['a','b']]

In [198]: c=copy.deepcopy(a)

In [199]: a.append(5)

In [200]: a
Out[200]: [1, 2, 3, 4, ['a', 'b'], 5] In [201]: c
Out[201]: [1, 2, 3, 4, ['a', 'b']] In [202]: a[4].append('c') In [203]: a
Out[203]: [1, 2, 3, 4, ['a', 'b', 'c'], 5] In [204]: c
Out[204]: [1, 2, 3, 4, ['a', 'b']]

综上所述,浅copy和深copy:

  copy浅拷贝(copy.copy()),没有拷贝子对象,所以原始数据改变,子对象会改变

       深copy的相同在于(copy.deepcopy()),包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变

       它们的相同之处是,父对象都没有改变!

Python里面如何拷贝一个对象的更多相关文章

  1. python里面如何拷贝一个对象,deecopy和copy的区别

    copy仅拷贝对象的本身,而不拷贝对象引用的其它对象. deecopy除拷贝对象本身,而拷贝对象引用的其它对象.

  2. python里面如何拷贝一个对象?deepcopy 和 copy 有什么区别 ?

    深拷贝就是说原内容改变但是拷贝的性内容不会改变,copy.copy和deepcopy对一个不可变类型进行拷贝, name结果相同都是浅拷贝指向引用如果是可变的话, 即使元组在最外层, 那么deepco ...

  3. Python里面如何拷贝一个对象?(赋值,浅拷贝,深拷贝的区别)

    答:赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个. 浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另外一个也会修改 ...

  4. Python里面如何拷贝一个对象?

    import copy lst=[1,2,3,4,[1,2]] # 复制列表lst,命名lst2 lst2=copy.copy(lst) print(f'这是lst3:{lst2}') # 深拷贝 l ...

  5. python赋值和拷贝----一切皆对象,参数皆引用

    摘要: 1 python中的一切事物皆为对象,并且规定参数的传递都是对象的引用. 2  python参数传递都是"传对象引用"方式.实际上相当于c++中传值和传引用的结合. 3 如 ...

  6. python中深浅拷贝

    python的复制,深拷贝和浅拷贝的区别   在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一 ...

  7. Python原理 -- 深浅拷贝

    python原理 -- 深浅拷贝 从数据类型说开去 str, num : 一次性创建, 不能被修改, 修改即是再创建. list,tuple,dict,set : 链表,当前元素记录, 下一个元素的位 ...

  8. Python的深浅拷贝

    Python的深浅拷贝 深浅拷贝 1. 赋值,对于list, set, dict来说, 直接赋值. 其实是把内存地址交给变量并不是复制一份内容 list1 = [']] list2 = list1 p ...

  9. 图解Python中深浅拷贝

    在工作中,常涉及到数据的传递,在数据传递使用过程中,可能会发生数据被修改的问题.为了防止数据被修改,就需要在传递一个副本,即使副本被修改,也不会影响原数据的使用.为了生成这个副本,就产生了拷贝.今天就 ...

随机推荐

  1. 洗礼灵魂,修炼python(67)--爬虫篇—cookielib之爬取需要账户登录验证的网站

    学完前面的教程,相信你已经能爬取大部分的网站信息了,但是当你爬的网站多了,你应该会发现一个新问题,有的网站需要登录账户才能看到更多的信息对吧?那么这种网站怎么爬取呢?这些登录数据就是今天要说的——co ...

  2. c/c++ 图相关的函数(二维数组法)

    c/c++ 图相关的函数(二维数组法) 遍历图 插入顶点 添加顶点间的线 删除顶点 删除顶点间的线 摧毁图 取得与v顶点有连线的第一个顶点 取得与v1顶点,v1顶点之后的v2顶点的之后的有连线的第一个 ...

  3. cURL模拟POST提交数据

    首先,是这个代码: <?php //curl模拟post提交数据$url = "http://127.0.0.1/immoc/output.php";$post_data = ...

  4. 寒假训练——搜索——C - Robot

    The Robot Moving Institute is using a robot in their local store to transport different items. Of co ...

  5. 【NOI2018模拟5】三角剖分Bsh

    [NOI2018模拟5]三角剖分Bsh Description 给定一个正 n 边形及其三角剖分,共 2n - 3 条边 (n条多边形的边和n-3 条对角线),每条边的长度为 1. 共 q 次询问,每 ...

  6. C#基础の迭代器详解

    一.什么是迭代器 迭代器(iterator)有时又称游标(cursor)是程序设计的软件设计模式,可在容器(container,例如链表或阵列)上遍访的接口,设计人员无需关心容器的内容. 迭代器模式是 ...

  7. python学习初始函数

    函数的用途:解决代码的冗余.可读性差.可扩展性差. 函数的一般格式: #函数定义 def mylen(): """计算s1的长度""" s1 ...

  8. <转> mysql处理高并发,防止库存超卖

    先来就库存超卖的问题作描述:一般电子商务网站都会遇到如团购.秒杀.特价之类的活动,而这样的活动有一个共同的特点就是访问量激增.上千甚至上万人抢购 一个商品.然而,作为活动商品,库存肯定是很有限的,如何 ...

  9. TensorFlow的主要依赖库

    Protool Buffer 处理结构化数据的工具 Name:张飞 id: 123456 email: 10000@qq.com 上面信息 就是一个结构化数据(这里说的结构化数据和大数据的结构化数据概 ...

  10. Linux 创建静态库(.a)和动态库(.so)

    0. 回顾一下 gcc 选项 ============================================== -E : 仅做预处理,例如去注释,宏展开,include 展开等 -S : ...