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

一般有三种方法,

alist=[1,2,3,["a","b"]]

(1)直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变

>>> b=alist
>>> print b
[1, 2, 3, ['a', 'b']]
>>> alist.append(5)
>>> print alist;print b
[1, 2, 3, ['a', 'b'], 5]
[1, 2, 3, ['a', 'b'], 5]

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

>>> import copy

>>> c=copy.copy(alist)
>>> print alist;print c
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b']]
>>> alist.append(5)
>>> print alist;print c
[1, 2, 3, ['a', 'b'], 5]
[1, 2, 3, ['a', 'b']]

>>> alist[3]
['a', 'b']
>>> alist[3].append('cccc')
>>> print alist;print c
[1, 2, 3, ['a', 'b', 'cccc'], 5]
[1, 2, 3, ['a', 'b', 'cccc']] 里面的子对象被改变了

(3)深拷贝,包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变

>>> import copy

>>> d=copy.deepcopy(alist)
>>> print alist;print d
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b']]始终没有改变
>>> alist.append(5)
>>> print alist;print d
[1, 2, 3, ['a', 'b'], 5]
[1, 2, 3, ['a', 'b']]始终没有改变
>>> alist[3]
['a', 'b']
>>> alist[3].append("ccccc")
>>> print alist;print d
[1, 2, 3, ['a', 'b', 'ccccc'], 5]
[1, 2, 3, ['a', 'b']]  始终没有改变

补充:
在CPython中,判断两个对象是否指向同一个的方法,可以使用id(obj)函数,它返回对象的内存地址
若内存地址相同,那必然是同一个对象了

原文链接:https://www.cnblogs.com/xueli/p/4952063.html

转载于:https://www.cnblogs.com/achillis/p/10408399.html

【转】python的复制,深拷贝和浅拷贝的区别相关推荐

  1. python 深拷贝_详解python的复制,深拷贝和浅拷贝的区别

    概述 今天主要来看看Python中的浅拷贝和深拷贝内容,这里用一个实例来说明~ 需求: 将一个列表的数据复制到另一个列表中. 思路: 使用列表[:],拿不准可以调用copy模块. 实现方法: #!/u ...

  2. python的复制,深拷贝和浅拷贝的区别

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

  3. Python中深拷贝与浅拷贝的区别?

    往期面试题: 列举Python中的标准异常类? 说说Python面向对象三大特性? 说说Python中有几种数据类型? 说说Python模块主要分哪三类? 废话不多说,开始今天的题目: 问:说说Pyt ...

  4. python中的深拷贝与浅拷贝

    浅拷贝的时候,修改原来的对象,深拷贝的对象不会发生改变. 对象的赋值 对象的赋值实际上是对象之间的引用:当创建一个对象,然后将这个对象赋值给另外一个变量的时候,python并没有拷贝这个对象,而只是拷 ...

  5. python中关于深拷贝和浅拷贝的详解

    python中关于深拷贝和浅拷贝的详解 概述 在python的语法中,有两种变量的拷贝方式 一种是深拷贝,一种是浅拷贝 我们先说深拷贝 语法 这里需要通过导入系统的copy模块中的deepcopy才可 ...

  6. python怎么避免浅拷贝_详谈Python中的深拷贝和浅拷贝

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

  7. Python基础:对象的深拷贝和浅拷贝的区别

    Python基础:对象的深拷贝和浅拷贝的区别 1 变量与对象 2 不可变对象与可变对象 3 直接赋值 4 浅拷贝 5 深拷贝 参考文献 1 变量与对象 对象:内存中存储数据的实体,有明确的类型.在Py ...

  8. python中深拷贝与浅拷贝的区别

    ####################python中的数据类型####################### ##########python中的数据类型有6种,分别为:数字类型如int,float ...

  9. C++深拷贝与浅拷贝的区别-简单易懂

    C++深拷贝与浅拷贝的区别-简单易懂 介绍 浅拷贝就比如像引用类型,而深拷贝就比如值类型. 浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(名称不同).对其中任何一个对象的改动都会影响另 ...

  10. 【C++面试问答】搞清楚深拷贝与浅拷贝的区别

    问题 深拷贝和浅拷贝的区别是面试中的常见问题之一,对于不同的编程语言,这个问题的回答可能稍有差别,下面我们就来探索一下它们之间的异同吧. 先来看看在JavaScript对象的深拷贝与浅拷贝的区别: 浅 ...

最新文章

  1. 专访朱雷:昔日的游戏少年,如今的Python工匠
  2. Linux运维比较实用的工具
  3. 推荐算法炼丹笔记:如何让你的推荐系统具有可解释性?
  4. jquery --- 多选下拉框的移动(穿梭框)
  5. CV Code | 本周新出计算机视觉开源代码汇总(含图像修复、目标检测、医学图像分割、度量学习等)...
  6. opend和open的区别_open与open up的区别
  7. python求直角三角形斜边底下的数值怎么输_如何用用户输入的值求三角形的角,以及如何绘制i...
  8. [Informix] unload load
  9. DeepMind智能体自学跑酷:略显智障,结果尚好
  10. python中datetime函数怎么获得当年年份_Python 日期和时间函数使用指南
  11. 小程序向webview传参_微信小程序(1)——web-view和小程序间传递参数、发送消息...
  12. 前端性能优化学习(慕课网)笔记
  13. RHCSA8考试-root密码破解
  14. 好好编程-物流项目03【GitHub管理】
  15. XHTML的目标,规则和细节
  16. 去除迅雷右侧资源信息栏和迅雷广告,以及迅雷的速度限制修改
  17. Bitmap对象在内存中的大小和转化为字节流的大小
  18. Java零散知识点记录——类的方法
  19. codewhy_vue笔记01
  20. chrome无法打开无痕模式的解决方案

热门文章

  1. Maven学习(一)————Maven技术概述
  2. 猜拳游戏html,JavaScript中实现猜拳小游戏
  3. bundle 安装_超级小白使用pip安装第三方库的正确姿势
  4. matlab二元方程组,用matlab解一个二元方程组,会的进,得到解再回答
  5. 宿松县事业单位计算机基础知识,计算机基础知识试题(事业单位考试)
  6. vector简单应用
  7. python捕获异常装饰器_python异常装饰器--比较全的版本了
  8. html5新增的type类型,html5新增的type类型
  9. linux 中的时间戳功能,Linux中时间戳取证研究
  10. matlab 矩阵与向量乘,matlab问题,关于矩阵向量的乘问题