Python的复制,深拷贝和浅拷贝的区别

2023-11-19

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

一般有三种方法,

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

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

>>> alist=[1,2,3,['a','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浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变

目前alist=[1, 2, 3, ['a', 'b'], 5]

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

 

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

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

>>> import copy
>>> alist=[1,2,3,['a','b']]
>>> 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=[1,2,3,['a','b']]
>>> alist[3]
['a', 'b']
>>> alist[3].append('Python')
>>> print alist;print d
[1, 2, 3, ['a', 'b', 'Python']]
[1, 2, 3, ['a', 'b']]

      发现始终没有改变

总结:

1. 赋值是将一个对象的地址赋值给一个变量,让变量指向该地址( 旧瓶装旧酒 )。

2. 浅拷贝是在另一块地址中创建一个新的变量或容器,但是容器内的元素的地址均是源对象的元素的地址的拷贝。也就是说新的容器中指向了旧的元素( 新瓶装旧酒 )。

3. 深拷贝是在另一块地址中创建一个新的变量或容器,同时容器内的元素的地址也是新开辟的,仅仅是值相同而已,是完全的副本。也就是说( 新瓶装新酒 )。

 

转载于:https://www.cnblogs.com/wft1990/p/5808010.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python的复制,深拷贝和浅拷贝的区别 的相关文章

  • python:查找围绕某个 GPS 位置的圆的 GPS 坐标的优雅方法

    我有一组以十进制表示的 GPS 坐标 并且我正在寻找一种方法来查找每个位置周围半径可变的圆中的坐标 这是一个例子 http green and energy com downloads test circle html我需要什么 这是一个圆
  • 使用特定的类/函数预加载 Jupyter Notebook

    我想预加载一个笔记本 其中包含我在另一个文件中定义的特定类 函数 更具体地说 我想用 python 来做到这一点 比如加载一个配置文件 包含所有相关的类 函数 目前 我正在使用 python 生成笔记本并在服务器上自动启动它们 因为不同的
  • 在 django ORM 中查询时如何将 char 转换为整数?

    最近开始使用 Django ORM 我想执行这个查询 select student id from students where student id like 97318 order by CAST student id as UNSIG
  • Python 中的哈希映射

    我想用Python实现HashMap 我想请求用户输入 根据他的输入 我从 HashMap 中检索一些信息 如果用户输入HashMap的某个键 我想检索相应的值 如何在 Python 中实现此功能 HashMap
  • 安装了 32 位的 Python,显示为 64 位

    我需要运行 32 位版本的 Python 我认为这就是我在我的机器上运行的 因为这是我下载的安装程序 当我重新运行安装程序时 它会将当前安装的 Python 版本称为 Python 3 5 32 位 然而当我跑步时platform arch
  • 将html数据解析成python列表进行操作

    我正在尝试读取 html 网站并提取其数据 例如 我想查看公司过去 5 年的 EPS 每股收益 基本上 我可以读入它 并且可以使用 BeautifulSoup 或 html2text 创建一个巨大的文本块 然后我想搜索该文件 我一直在使用
  • 处理 Python 行为测试框架中的异常

    我一直在考虑从鼻子转向行为测试 摩卡 柴等已经宠坏了我 到目前为止一切都很好 但除了以下之外 我似乎无法找出任何测试异常的方法 then It throws a KeyError exception def step impl contex
  • 将 python2.7 与 Emacs 24.3 和 python-mode.el 一起使用

    我是 Emacs 新手 我正在尝试设置我的 python 环境 到目前为止 我已经了解到在 python 缓冲区中使用 python mode el C c C c将当前缓冲区的内容加载到交互式 python shell 中 显然使用了什么
  • 独立滚动矩阵的行

    我有一个矩阵 准确地说 是 2d numpy ndarray A np array 4 0 0 1 2 3 0 0 5 我想滚动每一行A根据另一个数组中的滚动值独立地 r np array 2 0 1 也就是说 我想这样做 print np
  • 您可以格式化 pandas 整数以进行显示,例如浮点数的“pd.options.display.float_format”?

    我见过this https stackoverflow com questions 18404946 py pandas formatdataframe and this https stackoverflow com questions
  • Pandas Merge (pd.merge) 如何设置索引和连接

    我有两个 pandas 数据框 dfLeft 和 dfRight 以日期作为索引 dfLeft cusip factorL date 2012 01 03 XXXX 4 5 2012 01 03 YYYY 6 2 2012 01 04 XX
  • datetime.datetime.now() 返回旧值

    我正在通过匹配日期查找 python 中的数据存储条目 我想要的是每天选择 今天 的条目 但由于某种原因 当我将代码上传到 gae 服务器时 它只能工作一天 第二天它仍然返回相同的值 例如当我上传代码并在 07 01 2014 执行它时 它
  • 如何在 Python 中解析和比较 ISO 8601 持续时间? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 Python v2 库 它允许我解析和比较 ISO 8601 持续时间may处于不同单
  • Numpy - 根据表示一维的坐标向量的条件替换数组中的值

    我有一个data多维数组 最后一个是距离 另一方面 我有距离向量r 例如 Data np ones 20 30 100 r np linspace 10 50 100 最后 我还有一个临界距离值列表 称为r0 使得 r0 shape Dat
  • 加快网络抓取速度

    我正在使用一个非常简单的网络抓取工具抓取 23770 个网页scrapy 我对 scrapy 甚至 python 都很陌生 但设法编写了一个可以完成这项工作的蜘蛛 然而 它确实很慢 爬行 23770 个页面大约需要 28 小时 我看过scr
  • 使用特定颜色和抖动在箱形图上绘制数据点

    我有一个plotly graph objects Box图 我显示了箱形 图中的所有点 我需要根据数据的属性为标记着色 如下所示 我还想抖动这些点 下面未显示 Using Box我可以绘制点并抖动它们 但我不认为我可以给它们着色 fig a
  • 模拟pytest中的异常终止

    我的多线程应用程序遇到了一个错误 主线程的任何异常终止 例如 未捕获的异常或某些信号 都会导致其他线程之一死锁 并阻止进程干净退出 我解决了这个问题 但我想添加一个测试来防止回归 但是 我不知道如何在 pytest 中模拟异常终止 如果我只
  • 如何计算Python中字典中最常见的前10个值

    我对 python 和一般编程都很陌生 所以请友善 我正在尝试分析包含音乐信息的 csv 文件并返回最常听的前 n 个乐队 从下面的代码中 每听一首歌曲都是一个列表中的字典条目 格式如下 album Exile on Main Street
  • 更改 Tk 标签小部件中单个单词的颜色

    我想更改 Tkinter 标签小部件中单个单词的字体颜色 我知道可以使用文本小部件来实现与我想要完成的类似的事情 例如使单词 YELLOW 显示为黄色 self text tag config tag yel fg clr yellow s
  • cv2.VideoWriter:请求一个元组作为 Size 参数,然后拒绝它

    我正在使用 OpenCV 4 0 和 Python 3 7 创建延时视频 构造 VideoWriter 对象时 文档表示 Size 参数应该是一个元组 当我给它一个元组时 它拒绝它 当我尝试用其他东西替换它时 它不会接受它 因为它说参数不是

随机推荐

  • 优秀软件测试工程师必备的8个能力!-(附思维导图)

    结合自己以往的工作经验 自己梳理出来一些材料 绝对原创 绝对干货 优秀的软件测试工程师必备的 8个能力 作为一名软件工程师 需要的能力并不多 但是要成为一名优秀的软件测试工程师 需要的能力就比较多了 自己整理出来8个方面 每个方面都会分成很
  • CLIP与CoOp代码分析

    CLIP与CoOp代码分析 CoOp是稍微改了下CLIP的text encoder CLIP代码 https github com OpenAI CLIP CoOp代码 https github com KaiyangZhou CoOp 输
  • 配置无线WLAN旁挂三层组网直接转发

    企业用户接入 WLAN 网络 以满足移动办公的最基本需求 且在覆盖区域内移动 发生漫游时 不影响用户的业务使用 使用 VLAN pool 作为业务 VLAN 可以避 免出现 IP 地址资源不足或者 IP 地址资源浪费 减小单个 VLAN 下
  • 有效的域名后缀列表

    Version 2016060300 Last Updated Fri Jun 3 07 07 01 2016 UTC AAA AARP ABB ABBOTT ABBVIE ABOGADO ABUDHABI AC ACADEMY ACCEN
  • ffmpeg命令详解_火爆抖音60帧视频制作教程详解

    针对目前火爆抖音的超清60帧视频 今晚写一篇详细的制作教程 供大家分享 声明 60帧视频制作教程详解 文章内容为本人原创 转载请注明出处 首先再做学做补帧教程之前 大家要明白帧率的提升只是画面流畅度的提升 而非画面清晰度的提升 但是两者是有
  • 怎么写文献综述

    文献综述是由原始文献中大量的数据 资料 不同观点加以梳理整合后所形成的 文献综述的撰写时要将客观资料与主观论断融为一体 但是不能述评鲜明的表达作者本人的观点和立场 文献综述需要包含以下内容 问题提出的背景 发展过程 基本理论 最新成就 存在
  • Unity3D 碰撞器和触发器

    对于碰撞器和触发器经常忘记用法 这次主要记录下以便于能够复习用 1 碰撞器 发生条件 1 碰撞的双方中一定至少要有一个Rigidbody存在 并且碰撞双方必须都要有碰撞体组件 2 碰撞双方若只有一个有刚体 那么那个刚体一定要处于运动的状态下
  • Redis爬坑记(一):incr命令和expire命令的误区

    关注公众号 要实现的功能 限制用户的每分钟的访问次数 一个有严重bug的代码 每次访问来了 就执行代码块二 当第一次访问 就走else语句 设置当前用户的次数为1 且设置该key的有效期是一分钟 在一分钟之内 第二次来访问了 就走if语句了
  • XSS常见的触发标签

    无过滤情况 img 图片加载错误时触发 img src x img src 1 鼠标指针移动到元素时触发 img src 1 鼠标指针移出时触发 img src 1 a a href https www qq com qq a a href
  • 微信小程序开发通过mock后台数据,如何使用mock模拟后台数据,以及在小程序中使用

    作为一名前端开发人员 应该有很多像我一样不会写后台接口 但是网上非常多的项目都是需要后台数据支持的 这个时候前端开发人员可能会犯愁 现在我给大家推荐一个网站 可以帮助我们简单模拟后代数据 1 首先 在该网址https www fastmoc
  • 实验1-FPGA编程入门

    文章目录 一 认识全加器 二 输入原理图实现1位加法器 一 半加器原理图输入 二 全加器原理图输入 三 Verilog语言实现全加器 四 总结 五 资料参考 一 认识全加器 一 半加器 1 逻辑分析 如下图所示 半加器只有两个输入和两个输出
  • Windows10自动更新-修改注册表

    Win r 输入 regedit 打开注册表 注册表路径 HKEY LOCAL MACHINE SYSTEM ControlSet001 Services wuauserv Parameters 后面加了个 disable 方便以后改回来
  • 比较两个 List 的值是否相等

    public static
  • python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告

    前言 1 环境准备 python3 6 requests xlrd openpyxl HTMLTestRunner api 2 目前实现的功能 封装requests请求方法 在excel填写接口请求参数 运行完后 重新生成一个excel报告
  • Flutter进阶实战 6-20 酷炫的路由动画-2

    前言 前面在路由动画1中我们介绍了 渐隐渐现过度动画 的使用 这里再介绍三种动画以及叠加动画的使用 一 缩放路由动画 return ScaleTransition scale Tween begin 0 0 end 1 0 animate
  • 保存文件为UTF8格式(Writing UTF-8 files in C++).

    都是简单的单词 我就不翻译了 原文地址 http mariusbancila ro blog 2008 10 20 writing utf 8 files in c Let s say you need to write an XML fi
  • Ant design 组件实现动态列表

    文章目录 一 动态列表 二 场景实现 实现效果 实现代码 一 动态列表 动态列表Form List是包含多个表单的情况 往往是多维数组数据 意思就是往往这个数据传递到后端是数组数据 二 场景实现 实现效果 实现代码 import React
  • Nacos快速入门(一):Nacos初探

    1 简介 Nacos官网 https nacos io zh cn index html 1 1 概览 Nacos 致力于帮助您发现 配置和管理微服务 Nacos 提供了一组简单易用的特性集 帮助您快速实现动态服务发现 服务配置 服务元数据
  • Linux_CentOS8_磁盘管理_磁盘大小调整_`No space left on device` (2)

    Issue CentOS8 in the VMware No space left on device 1 Issue Description Initially 20G Hard Disk SCSI was portioned to th
  • Python的复制,深拷贝和浅拷贝的区别

    在python中 对象赋值实际上是对象的引用 当创建一个对象 然后把它赋给另一个变量的时候 python并没有拷贝这个对象 而只是拷贝了这个对象的引用 一般有三种方法 alist 1 2 3 a b 1 直接赋值 传递对象的引用而已 原始列