Python的深浅拷贝

2023-10-27

目录

一、可变对象和不可变对象

二、概念

三、深浅拷贝

1.浅拷贝

2.深拷贝


一、可变对象和不可变对象

可变类型:列表、字典、集合

不可变类型:整数、小数、复数、字符串、元组

二、概念

= 是指向引用

浅拷贝:只拷贝父对象,不拷贝子对象

深拷贝:拷贝对象以及其子对象

三、深浅拷贝

copy是python的标准库

import copy

copy.copy()  浅拷贝

copy.deepcopy() 深拷贝

1.浅拷贝

import copy
a = [1,2,3,4,['a', 'b'],('e','f')]
b = copy.copy(a)
print("id(a[4]),id(b[4]) :",id(a[4]),id(b[4]))
a.append(6)
b.append(7)
print("id(a[4]),id(b[4]) :",id(a[4]),id(b[4]))
print("a,b :",a,b)
print("id(a),id(b):",id(a),id(b))
b[4].append('c')
print("a,b :",a,b)
print("id(a),id(b):",id(a),id(b))

第一次打印 时,a列表和b列表里面的地址值是一样的

列表新增内容之后,浅拷贝第二次打印地址不会改变a,b列表的地址值;

第三次打印是打印a,b列表里面子列表元素的地址值;

然后b列表的子列表新增一个元素,第四次是打印一下a,b列表,可以发现两个列表的子列表都同时新增了新的元素;

第五次打印可以看到a,b列表的父对象地址值都没有发生变化;

第六次打印可以看到a,b列表的子列表的地址值是一样的,没有改变;

说以说明浅拷贝只拷贝的父对象的地址值,不会改变子对象的地址值;

2.深拷贝

深拷贝使用的是copy.deepcopy()

import copy
a = [1,2,3,['a','b']]
b = copy.deepcopy(a)

print("id(a), id(b):",id(a), id(b))
print("id(a[3]), id(b[3]):",id(a[3]), id(b[3]))
a[3].append('C')
b[3].append('d')
print(a,b)
print("id(a), id(b):",id(a), id(b))
print("id(a[3]), id(b[3]):",id(a[3]), id(b[3]))

第一次打印的是a,b列表的地址值,深拷贝情况两个列表的地址值是独立的不一样的

第二次打印的是a,b列表的子列表的地址值,深拷贝情况下子列表的地址值也是独立的不一样的;

给两个子列表新增元素后,

第三次打印的是a,b列表的地址值,保持不变;

第四次打印的是a,b列表的子列表的地址值,新增之后保持不变;

所以深拷贝时,拷贝的父对象以及其子对象的地址值都是重新生成的独立的,互不影响的

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

Python的深浅拷贝 的相关文章

  • 有没有办法使用纯Python释放纯函数的GIL?

    我想我一定错过了什么 这看起来很正确 但我看不出有什么办法可以做到这一点 假设你有一个 Python 纯函数 from math import sin cos def f t x 16 sin t 3 y 13 cos t 5 cos 2
  • Flask/Apache 提交按钮用于文件上传

    我有一个在 apache 后面运行的 Flask 应用程序 在我的 index html 页面上有一个文件上传按钮和一个提交按钮 如下所示
  • AttributeError:模块“tensorflow.python.framework.ops”没有属性“RegisterShape”

    我正在使用 TensorFlow 2 1 0 dev20191125 不幸的是 我无法编译一个带有错误的简单示例 AttributeError 模块 tensorflow python framework ops 没有 属性 Registe
  • 使用 pygtk3 将 GUI 窗口添加到 python opencv2 程序

    我已经使用Python和Opencv2完成了一个程序 现在 我想向我的程序添加一个 GUI 窗口 我对 PyGtk3 有一些经验 因此 我修改了代码以采用 PyGtk3 但是 我遇到了错误 因此 我尝试了一个简单的程序来找出实际的错误 我的
  • 计算 for 循环期间的运行总计 - Python

    编辑 下面是我根据收到的反馈 答案编写的工作代码 这个问题源于我之前使用 MIT 的开放课件学习 Python CS 时提出的问题 在这里查看我之前的问题 https stackoverflow com questions 4990159
  • 类型错误:只有长度为 1 的数组可以转换为 Python 标量

    我是 openCV 的初学者 正在尝试分析数独求解器的现有代码 有这一段代码会引发错误 samples np float32 np loadtxt feature vector pixels data responses np float3
  • 熊猫 style.background_gradient 忽略 NaN

    我有以下代码来转储数据帧results到 HTML 表格中 这样的列TIME FRAMES根据seaborn 的颜色图进行着色 import seaborn as sns TIME FRAMES 24h 7d 30d 1y Set CSS
  • 不使用 graphviz/web 可视化决策树

    由于某些限制 我无法使用 graphviz webgraphviz com 可视化决策树 工作网络与另一个世界是封闭的 问题 是否有一些替代实用程序或一些 Python 代码用于至少非常简单的可视化可能只是决策树的 ASCII 可视化 py
  • Python控制台默认十六进制显示

    我在 Python 控制台中做了很多工作 其中大部分都涉及地址 我更喜欢以十六进制形式查看地址 So if a 0xBADF00D 当我简单地输入Python gt a进入控制台查看其值 我更喜欢 python 回复0xBADF00D代替1
  • 自定义信号的声明

    在 Qt 中 我们可以通过将自定义信号设为静态变量来创建它们 然后我们使用self signame反而classname signame 这样就在类中创建了一个实例变量 我想了解这种模式之外的理论 这是我尝试过的一些伪代码 这些伪代码已记录
  • Pythoncom - 将相同的 COM 对象传递给多个线程

    你好 对于 COM 对象 我是一个完全的初学者 非常感谢任何帮助 我正在开发一个Python程序 该程序应该以客户端 服务器的方式读取传入的MS Word文档 即客户端发送一个请求 一个或多个MS Word文档 服务器使用pythoncom
  • 如何对嵌套函数进行单元测试? [复制]

    这个问题在这里已经有答案了 您将如何对嵌套函数进行单元测试f1 在下面的例子中 def f def f1 return 1 return 2 或者需要测试的函数不应该嵌套吗 有一个类似的问题这个链接 https stackoverflow
  • 将多个 isinstance 检查转换为结构模式匹配

    我想转换此现有代码以使用模式匹配 if isinstance x int pass elif isinstance x str x int x elif isinstance x float Decimal x round x else r
  • 如何使用JQuery和Django(ajax + HttpResponse)?

    假设我有一个 AJAX 函数 function callpage ajax method get url abc data x 3 beforeSend function success function html IF HTTPRESPO
  • 在 Django 中翻译文件时的 Git 命令

    我在 Django 中有一个现有的应用程序 我想在页面上添加翻译 在页面上我有 trans Projects 在 po 文件中我添加了 templates staff site html 200 msgid Projects msgid P
  • 如何在 Flask 中获取 POSTed JSON?

    我正在尝试使用 Flask 构建一个简单的 API 现在我想在其中读取一些 POSTed JSON 我使用 Postman Chrome 扩展进行 POST 我 POST 的 JSON 很简单 text lalala 我尝试使用以下方法读取
  • 使用多行选项和编码选项读取 CSV

    在 azure Databricks 中 当我使用以下命令读取 CSV 文件时multiline true and encoding SJIS 似乎编码选项被忽略了 如果我使用multiline选项 Spark 使用默认值encoding那
  • Django:在单独的线程中使用相同的测试数据库

    我正在使用具有以下数据库设置的测试数据库运行 pytests DATABASES default ENGINE django db backends postgresql psycopg2 NAME postgres USER someth
  • 从 xgb.train() 获取概率

    我是 Python 和机器学习的新手 我在网上搜索了我的问题 并尝试了人们建议的解决方案 但仍然没有得到它 如果有人能帮助我 我将非常感激 我正在开发我的第一个 XGboost 模型 我已经使用 xgb XGBClassifier 调整了参
  • 无法在 Python 2.4 中解码 unicode 字符串

    这是Python 2 4 中的 这是我的情况 我从数据库中提取一个字符串 它包含一个变音的 o xf6 此时 如果我运行 type value 它会返回 str 然后我尝试运行 decode utf 8 但收到错误 utf8 编解码器无法解

随机推荐

  • 学习笔记:基于Transformer的时间序列预测模型

    1 一些准备的说明 为了便于读者理解 笔者将采取一个盾构机掘进参数预测的实际项目进行Transformer模型的说明 此外 该贴更多用于本人的学习记录 适合于对Transformer模型已经有一定了解的读者 此此次外 不定期更新中 一些参考
  • mybatisPlus分页查询的配置类

    SpringBoot中分页查询的配置类 Configuration public class MybatisPlusConfig Bean public MybatisPlusInterceptor mybatisPlusIntercept
  • 计算机视觉服务系统

    tornado教程HTTP教程 Eureka教程Eureka1Eureka2
  • Colossal-AI的安装

    最近在学习stable diffusion model 但是这个模型成本比较高 作为低端学习者 借助colossal ai加速训练 即能满足显卡要求又能节约时间 Colossal AI 是一个集成的大规模深度学习系统 具有高效的并行化技术
  • 二叉树变成搜索二叉树

    给你一个普通的二叉树 把它变成搜索二叉树 要求不改变这个树的结构 例如 给你如下二叉树 10 2 7 8 4 结果是 8 4 10 2 7 思路 1 中序遍历该二叉树 把结果存在临时数组 arr 中 2 对 arr 进行排序 3 把 arr
  • C++(11):true_type, false_type

    true type和false type是integral constant实例化的别名 C 11 integral constant 风静如云的博客 CSDN博客 template
  • matlab机械手ikine函数,matlab机器人工具箱10.1(有函数说明)

    实例简介 机器人工具箱10 1版 有例子可以学习 希望对大家有所帮助 实例截图 核心代码 robot工具箱 V10 1有例子 robot工具箱10 1及例子 matlab robot V10 1工具箱 pdf rvctools common
  • OpenXml操作Word的一些操作总结.无word组件生成word.

    OpenXml相对于用MS提供的COM组件来生成WORD 有如下优势 1 相对于MS 的COM组件 因为版本带来的不兼容问题 及各种会生成WORD半途会崩溃的问题 2 对比填满一张30多页的WORD来说 包含图 表等 用COM组件来生成会占
  • 【笔记】AOE网与关键路径

    AOE网 关键路径 求关键路径的算法实现 AOE网是以边表示活动的有向无环网 在AOE网中 具有最大路径长度的路径称为关键路径 关键路径表示完成工程的最短工期 1 AOE网 AOE网是一个带权的有向无环图 其中用顶点表示事件 弧表示活动 权
  • PCL生成线段点云

    生成三角形 生成平行四边形 生成凸包 pcl 生成线段点云 pcl官方有生成球体 圆柱体 圆锥体的相关函数 似乎没有生成线段的函数 正好有需要 所以自己写了两个 分别是根据数量和步长生成 原理 原理很简单 已知两个三维点p1 p2 求出方向
  • vue中使用高德地图marker标记点的setLabel,在不同层级下控制显示隐藏

    vue中使用高德地图marker标记点的setLabel 在不同层级下控制显示隐藏 设置点标注的文本标签 marker setLabel offset new AMap Pixel 1 0 设置文本标注偏移量 content div nam
  • 全局获取Context的技巧(再也不要为获取Context而感到烦恼)

    前言 Android提供了一个Application类 每当应用程序启动的时候 系统就会自动将这个类进行初始化 而我们可以定制一个自己的Application类 以便管理程序内的一些全局状态信息 比如说全局Context 定制自己的Appl
  • SaaS与本地部署 路在何方?

    了解云计算的一定都听过四个 高大上 的概念 On Premises 本地部署 IaaS 基础设施及服务 PaaS 平台即服务 和SaaS 软件即服务 这几个术语并不好理解 ServiceHot 旗下现产品有 ServiceHot ITSOM
  • Issues with peer dependencies found

    peer dependencies 默认存在的依赖 通常在开发组件和插件的时候用到 表示这些依赖不用下载 项目的仓库里有 例子 package json peer dependencies react 问题背景 今天安装一些依赖 报了这个错
  • Linux驱动编程(分层分离编程思想)

    1 面向对象 字符设备驱动程序抽象出一个 file operations 结构体 我们写的程序针对硬件部分抽象出 led operations 结构体 2 分层 上层实现硬件无关的操作 比如注册字符设备驱动 leddrv c 下层实现硬件相
  • @Autowired 和 @Resource 分别什么时候使用比较好

    Autowired 和 Resource 都是用于依赖注入的注解 但是它们有一些不同的使用场景 Autowired 是 Spring 框架提供的注解 它可以自动装配一个 Bean 可以根据类型进行匹配 也可以根据名称进行匹配 当有多个 Be
  • 数制转换(数据结构课程设计C语言版)

    define CRT SECURE NO WARNINGS include
  • 51单片机——定时器

    51单片机 定时器 为什么使用定时器 定时器原理 定时器设置 中断配置 源代码 为什么使用定时器 之前我们的led灯每隔1s循环左移点亮的时候 使用的定时方法是在c程序执行若干次空循环 这样会耗费很多cpu资源 因为空轮询 本篇博客将使用5
  • epoll使用(服务端代码讲解)

    下面这段代码是一个回射服务器 它会把客户端发送给它的信息再返回给客户端 include
  • Python的深浅拷贝

    目录 一 可变对象和不可变对象 二 概念 三 深浅拷贝 1 浅拷贝 2 深拷贝 一 可变对象和不可变对象 可变类型 列表 字典 集合 不可变类型 整数 小数 复数 字符串 元组 二 概念 是指向引用 浅拷贝 只拷贝父对象 不拷贝子对象 深拷