当前位置: 首页 > news >正文

Python世界:复制粘贴?没那么简单!浅谈深拷贝与浅拷贝

Python世界:复制粘贴?没那么简单!浅谈深拷贝与浅拷贝

    • 问题引入
    • 切片拷贝是深还是浅?
    • 深拷贝和浅拷贝到底有啥区别?
    • 本文小结

问题引入

Python实现中,最近遇到个小问题,对其中的拷贝理解更深了些,这里小结下。

假设我们都知道以下常识:

  • 浅拷贝,值引用;只创建了新对象地址,值元素仍为老对象的内存
  • 深拷贝,值传递;既创建了新对象地址,值元素为新对象的内存

以及,按照之前的经验,我们认为切片处理的结果,都是新拷贝一片内存赋值过去。

切片拷贝是深还是浅?


先回顾下《简明Python教程》中引用一章所提的例子,

print('Simple Assignment')
shoplist = ['apple', 'mango', 'carrot', 'banana']
# mylist 只是指向同一对象的另一种名称
mylist = shoplist# 我购买了第一项项目, 所以我将其从列表中删除
del shoplist[0]print('shoplist is', shoplist)
print('mylist is', mylist)
# 注意到 shoplist 和 mylist 二者都
# 打印出了其中都没有 apple 的同样的列表, 以此我们确认
# 它们指向的是同一个对象print('Copy by making a full slice')
# 通过生成一份完整的切片制作一份列表的副本
mylist = shoplist[:]
# 删除第一个项目
del mylist[0]print('shoplist is', shoplist)
print('mylist is', mylist)
# 注意到现在两份列表已出现不同

此例中,我们可以看出,切片是复制了一片新内存给变量mylist,而第4行变量名字赋值,则只是传递的对象引用,并未申请新内存。

但我们就此可以认为切片操作是深拷贝吗?错把浅拷贝当深拷贝,请看下例。

# 切片操作是深拷贝,还是浅拷贝?lst = [1,2,[3,4]]
l1 = lst[:]
lst[2][0] = 1
lst[1] = 0
print(l1)lst = [1,2,3,4]
l1 = lst[:]
lst[2] = 1
print(l1)

Output:

[1, 2, [1, 4]]

[1, 2, 3, 4]

上例看出,列表中的切片仅拷贝了第1层的内存是赋值,改变原始列表,第6行中的[3,4]新变量中值就被修改成了[1,4],但显然改变lst[1]是新变量值就没变的,而第11行中lst原始值并未被改变。

所以,可以说切片是拷了,但只拷了一点点,本质等同于浅拷贝。

深拷贝和浅拷贝到底有啥区别?


  • 浅拷贝,值引用;只创建了新对象地址,值元素仍为老对象的内存
  • 深拷贝,值传递;既创建了新对象地址,值元素为新对象的内存

下面结合切片及深拷贝、浅拷贝举些实际场景用例来感受下以上概念内涵,结果见注释。

# 切片深拷贝还是浅拷贝实验
import numpy as np
import copyscale = 10# [0, 100],划分为5份
x = np.linspace(start=0, stop=100, num=5)
# x = np.linspace(0, 100, 5)
# print(x)# 引用
y_np_vector = x[:] # numpy数据结构切片,未拷贝新内存,数据内存是直接引用的
y_np_scalar = x[:] # y_np和x指向的数据内存均相同
# print(id(x)) # x的对象地址不同于y,但是两者对象所指的数据均一致。要修改该浅拷贝,需用深拷贝得到一个新内存。
# # 验证如下
# x[0] = 100
# print(y_np_vector) # y_np_vector[0]变为100
# print(y_np_scalar) # y_np_scalar[0]变为100# 赋值
y_np_vector = y_np_vector / scale # 新拷贝了一片内存,y_np_vector 结果指向新内存地址# 引用拷贝
for i in range(len(y_linear)):y_np_scalar[i] = y_np_scalar[i] / scale # 指向仍为x原内存
print('np切片,矢量处理与标量处理,x, y_np_vector, y_np_scalar')
print(x)
print(y_np_vector)
print(y_np_scalar)# 转成内置列表切片,新申请一片内存赋值
x = np.linspace(start=0, stop=100, num=5)
y_list = x.tolist() # y_list已是新内存
y_res_list = y_list[:] # y_res_list新内存for i in range(len(y_res2)):y_res_list[i] = y_res_list[i] / scale # y_res_list已为新内存
print('np转为列表切片,x, y_list, y_res_list')
print(x)
print(y_list)
print(y_res_list)# 显式进行赋值拷贝
x = np.linspace(start=0, stop=100, num=5)
y_res_copy = copy.copy(x)  # 仅拷贝第1层内存,已足够
y_res_deep = copy.deepcopy(x) # 拷贝所有x的内部嵌套结构到新内存for i in range(len(y_res2)):y_res_copy[i] = y_res_copy[i] / scale # y_res_list已为新内存y_res_deep[i] = y_res_deep[i] / scale # y_res2已为新内存
print('深浅拷贝,x, y_res_copy, y_res_deep')
print(x)
print(y_res_copy)
print(y_res_deep)

p切片,矢量处理与标量处理,x, y_np_vector, y_np_scalar
[10. 2.5 5. 7.5 10. ]
[10. 2.5 5. 7.5 10. ]
[10. 2.5 5. 7.5 10. ]
np转为列表切片,x, y_list, y_res_list
[ 0. 25. 50. 75. 100.]
[0.0, 25.0, 50.0, 75.0, 100.0]
[0.0, 2.5, 5.0, 7.5, 10.0]
深浅拷贝,x, y_res_copy, y_res_deep
[ 0. 25. 50. 75. 100.]
[ 0. 2.5 5. 7.5 10. ]
[ 0. 2.5 5. 7.5 10. ]

以上用例可得到以下结论:

  • numpy中的数组切片,未生成新的副本,均为引用
  • list列表中自带数据类型切片,仅拷贝第一层数据,等效于浅拷贝
  • 仅一层数据结构时,深拷贝等效于浅拷贝

so,下面例子是否能分清拷贝的深浅呢?

import numpy as np# 获取数据
row = 2
col = 3
scalar = 32start = 0
stop = 12
num = 6
step = (stop - start) / (num-1)
x = np.linspace(start, stop, num) # [start, stop]
# num = (stop - start) / step + 1# 切片与拷贝
y = x[:]
arr_2d_base = np.zeros([row, col])
arr_2d_scale = np.zeros([row, col])
for i in range(row):arr_2d_base[i] = x[i*col:(i+1)*col] / scalararr_2d_scale[i] = arr_2d_base[i] * (2**8)y[i*col:(i+1)*col] = y[i*col:(i+1)*col] / scalar
print('y是浅拷贝吗?')
print(x)
print(y)# 二维操作
arr_2d_base = np.zeros([row, col])
for i in range(row):arr_2d_base[i] = x[i*col:(i+1)*col] / scalar
arr_2d_scale = arr_2d_base * (2**8)
print('arr_2d_scale是深拷贝吗?')
print(arr_2d_scale)
arr_2d_base[0][0] = 1
print(arr_2d_scale)

本文小结


理论上最优的是默认拷贝新一片内存后修改,而不是原地修改。但工程上实现时,代价太大,且不是所有的都需要拷贝保留。

所以,在不同语言上,C都是手动管理内存,好在是明晰的告诉你,这个是原地修改还是新内存拷贝修改。Python由于是自动分配内存,就需要更深入的了解,每个拷贝赋值背后的内存结果,拷贝是引用还是赋值,赋值中又是深拷贝还是浅拷贝,

核心如下:

  • 列表切片操作是浅拷贝,numpy中切片是引用
  • 只有一层对象时,浅拷贝和深拷贝效果一致,都是新申请一片内存赋值。
  • 切片是深拷贝吗?不是,自带列表类型中,都是第一层浅拷贝。

参考资料:

  1. 《简明Python教程》中引用章节
  2. Python 直接赋值、浅拷贝和深度拷贝解析
  3. Python中“=”、切片、copy和deepcopy
  4. 列表的切片深拷贝还是浅拷贝?
  5. 聊一聊Python中的浅拷贝和深拷贝
  6. python 切片,浅拷贝和深拷贝知识汇总
  7. python-深拷贝和浅拷贝

相关文章:

Python世界:复制粘贴?没那么简单!浅谈深拷贝与浅拷贝

Python世界:复制粘贴?没那么简单!浅谈深拷贝与浅拷贝 问题引入切片拷贝是深还是浅?深拷贝和浅拷贝到底有啥区别?本文小结 问题引入 Python实现中,最近遇到个小问题,对其中的拷贝理解更深了些&a…...

vue3实现el-table的拖拽

我这里使用的是 sortablejs 插件; 安装命令: npm install sortablejs --save 注意点: 你的表格数据中要有id作为key去使用; <div class"draggable"><el-table row-key"id" :data"form.tableData" style"width: 100%" max-…...

Apache SSI 远程命令执行漏洞

目录 1、漏洞描述 2、访问页面 3、dirsearch工具爆破出上传目录 ​编辑 4、登录后台 5、上传shell.shtml一句话木马文件 6、拿到flag 1、漏洞描述 在测试任意文件上传漏洞的时候&#xff0c;目标服务端可能不允许上传php后缀的文件。如果目标服务器开启了SSI与CGI支持&a…...

高效集成:将聚水潭数据导入MySQL的实战案例

聚水潭数据集成到MySQL&#xff1a;店铺信息查询案例分享 在数据驱动的业务环境中&#xff0c;如何高效、准确地实现跨平台的数据集成是每个企业面临的重要挑战。本文将聚焦于一个具体的系统对接集成案例——将聚水潭的店铺信息查询结果集成到MySQL数据库中&#xff0c;以供BI…...

Elasticsearch面试内容整理-面试注意事项

在准备 Elasticsearch 面试时,除了掌握技术知识外,还需要注意如何有效展示你的技能和经验。以下是一些 Elasticsearch 面试的注意事项和建议: 掌握基础概念 在面试中,面试官通常会首先评估你对 Elasticsearch 基础概念的理解,包括集群架构、分片、副本、节点类型等。这些是…...

学习threejs,使用specularMap设置高光贴图

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.MeshPhongMaterial高…...

Cannot resolve symbol ‘ActivityThread‘ | Android 语法

背景 ActivityThread 是 Android 系统内部使用的一个类,它位于 android.app 包中,但在 Android SDK 的公共 API 中并没有公开。 由于 ActivityThread 是隐藏的内部类,因此在编写单元测试或功能开发时,无法直接引用它。可以使用反射来访问内部 API,或者使用依赖注入的方式…...

Cypress内存溢出奔溃问题汇总

内存溢出报错信息 <--- Last few GCs ---> [196:0xe58001bc000] 683925 ms: Scavenge 1870.7 (1969.9) -> 1865.6 (1969.9) MB, 6.07 / 0.00 ms (average mu 0.359, current mu 0.444) task; [196:0xe58001bc000] 683999 ms: Scavenge 1872.4 (1969.9) -> 1867.1…...

debian 11 虚拟机环境搭建过坑记录

目录 安装过程系统配置修改 sudoers 文件网络配置换源安装桌面mount nfs 挂载安装复制功能tab 无法补全其他安装 软件配置eclipse 配置git 配置老虚拟机硬盘挂载 参考 原来去 debian 官网下载了一个最新的 debian 12&#xff0c;安装后出现包依赖问题&#xff0c;搞了半天&…...

【k8s深入学习之 event 记录】初步了解 k8s event 记录机制

event 事件记录初始化 一般在控制器都会有如下的初始化函数&#xff0c;初始化 event 记录器等参数 1. 创建 EventBroadcaster record.NewBroadcaster(): 创建事件广播器&#xff0c;用于记录和分发事件。StartLogging(klog.Infof): 将事件以日志的形式输出。StartRecording…...

InterHub:为自动驾驶提供密集互动事件的自然驾驶轨迹数据集

InterHub 是一个为自动驾驶领域设计的自然驾驶轨迹数据集&#xff0c;它通过深入挖掘自然驾驶记录中的密集互动事件而构建。 InterHub 的特点在于其形式化的方法&#xff0c;这使得数据集能够精确描述和提取多智能体之间的互动事件&#xff0c;揭示了现有自动驾驶解决方案的局限…...

鸿蒙Next星河版基础用例

目录&#xff1a; 1、鸿蒙箭头函数的写法2、鸿蒙数据类型的定义3、枚举的定义以及使用4、position绝对定位及层级zIndex5、字符串的拼接转换以及数据的处理(1)字符串转数字(2)数字转字符串(3)布尔值转换情况(4)数组的增删改查 6、三元表达式7、鸿蒙for循环的几种写法7.1、基本用…...

ScribblePrompt 医学图像分割工具,三种标注方式助力图像处理

ScribblePrompt 的主要目标是简化医学图像的分割过程&#xff0c;这在肿瘤检测、器官轮廓描绘等应用中至关重要。相比依赖大量人工标注数据&#xff0c;该工具允许用户通过少量输入&#xff08;例如简单的涂鸦或点位&#xff09;来引导模型优化分割结果。这种方式减少了医学专家…...

PKO-LSSVM-Adaboost班翠鸟优化最小二乘支持向量机结合AdaBoost分类模型

PKO-LSSVM-Adaboost班翠鸟优化最小二乘支持向量机结合AdaBoost分类模型 目录 PKO-LSSVM-Adaboost班翠鸟优化最小二乘支持向量机结合AdaBoost分类模型效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.PKO-LSSVM-Adaboost班翠鸟优化最小二乘支持向量机结合AdaBoost分类模…...

5G学习笔记之随机接入

目录 1. 概述 2. MSG1 2.1 选择SSB 2.2 选择Preamble Index 2.3 选择发送Preamble的时频资源 2.4 确定RA-RNTI 2.5 确定发送功率 3. MSG2 4. MSG3 5. MSG4 6. 其它 6.1 切换中的随机接入 6.2 SI请求的随机接入 6.3 通过PDCCH order重新建立同步 1. 概述 随机接入…...

爬虫专栏第二篇:Requests 库实战:从基础 GET 到 POST 登录全攻略

简介&#xff1a;本文聚焦 Requests 库的强大功能与应用实战。首先介绍其安装步骤及版本选择要点&#xff0c;随后深入讲解 GET 请求&#xff0c;以百度页面为例&#xff0c;展示如何发起基本 GET 请求、巧妙添加 headers 与参数以精准搜索&#xff0c;以及正确设置 encoding 避…...

Android Studio更改项目使用的JDK

一、吐槽 过去&#xff0c;在安卓项目中配置JDK和Gradle的过程非常直观&#xff0c;只需要进入Android Studio的File菜单中的Project Structure即可进行设置&#xff0c;十分方便。 原本可以在这修改JDK: 但大家都知道&#xff0c;Android Studio的狗屎性能&#xff0c;再加…...

鸿蒙技术分享:Navigation页面管理-鸿蒙@fw/router框架源码解析(二)

本文是系列文章&#xff0c;其他文章见&#xff1a; 鸿蒙fw/router框架源码解析&#xff08;一&#xff09;-Router页面管理 鸿蒙fw/router框架源码解析&#xff08;三&#xff09;-Navigation页面容器封装 鸿蒙fw/router框架源码解析&#xff08;四&#xff09;-路由Hvigor插件…...

数据结构:树

树的基本定义&#xff1a; 树是一种数据结构&#xff0c;它是由n&#xff08;n>1&#xff09;个有限节点组成一个具有层次关系的集合。把它叫做 “树” 是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。它具有以下的特点&#xff1a; …...

矩阵sum,prod函数

s u m sum sum表示求和, p r o d prod prod表示求乘积 s u m sum sum函数 对于矩阵&#xff0c;可以对某一行或某一列求和&#xff0c;也可以对矩阵整体求和 s u m ( a , 1 ) sum(a,1) sum(a,1)计算每一列的和 s u m ( a , 2 ) sum(a,2) sum(a,2)计算每一行的和 计算矩阵整体…...

Cursor安装与使用,5分钟完成需求

Cursor简单介绍 Cursor是一款基于AI的代码编辑器&#xff0c;旨在帮助开发者更高效地编写和管理代码。它提供了智能代码补全、AI对话和跨文件编辑等创新功能。 一、安装下载 1、下载cursor&#xff1a;https://www.cursor.com/ 2、注册账号&#xff0c;直接拿自己的邮箱登录…...

嵌入式系统应用-LVGL的应用-平衡球游戏 part1

平衡球游戏 part1 1 平衡球游戏的界面设计2 界面设计2.1 背景设计2.2 球的设计2.3 移动球的坐标2.4 用鼠标移动这个球2.5 增加边框规则2.6 效果图 3 为小球增加增加动画效果3.1 增加移动效果代码3.2 具体效果图片 平衡球游戏 part2 第二部分文章在这里 1 平衡球游戏的界面设计…...

Vue基本语法

Options API 选项式/配置式api 需要在script中的export default一个对象对象中可以包含data、method、components等keydata是数据&#xff0c;数据必须是一个方法&#xff08;如果是对象&#xff0c;会导致多组件的时候&#xff0c;数据互相影响&#xff0c;因为对象赋值后&…...

UIE与ERNIE-Layout:智能视频问答任务初探

内容来自百度飞桨ai社区UIE与ERNIE-Layout&#xff1a;智能视频问答任务初探&#xff1a; 如有侵权&#xff0c;请联系删除 1 环境准备 In [2] # 安装依赖库 !pip install paddlenlp --upgrade !pip install paddleocr --upgrade !pip install paddlespeech --upgrade In …...

Mac启动服务慢问题解决,InetAddress.getLocalHost().getHostAddress()慢问题。

项目启动5分钟&#xff0c;很明显有问题。像网上其他的提高jvm参数就不说了&#xff0c;应该不是这个问题&#xff0c;也就快一点。 首先找到自己的电脑名称&#xff08;用命令行也行&#xff0c;只要能找到自己电脑名称就行&#xff0c;这里直接在共享里看&#xff09;。 复制…...

Django 视图层

from django.shortcuts import render, HttpResponse, redirectfrom django.http import JsonResponse1. render: 渲染模板 def index(request):print(reverse(index))return render(request, "index.html")return render(request, index.html, context{name: lisi})…...

HickWall 详解

优质博文&#xff1a;IT-BLOG-CN 一、监控分类 【1】Tracing调用链&#xff1a; 【2】Logging日志&#xff1a; 【3】Metrics指标&#xff1a;在应用发布之后&#xff0c;会长时间存在的度量维度。某个接口的请求量、响应时间。 Metrics数据模型 二、Metirc 接入 【1】pom…...

开源的跨平台SQL 编辑器Beekeeper Studio

一款开源的跨平台 SQL 编辑器&#xff0c;提供 SQL 语法高亮、自动补全、数据表内容筛选与过滤、连接 Web 数据库、存储历史查询记录等功能。该编辑器支持 SQLite、MySQL、MariaDB、Postgres 等主流数据库&#xff0c;并兼容 Windows、macOS、Linux 等桌面操作系统。 项目地址…...

Linux应用层学习——Day4(进程处理)

system #include<stdio.h> #include<stdlib.h>int main(int argc, char const *argv[]) {//使用标准库函数创建子进程//int system (const char *__command);//const char *__command:使用linux命令直接创建一个子进程//return:成功返回0 失败返回失败编号int sys…...

起别名typedef

#include<stdio.h> //typedef int myType1; //typedef char myType2; typedef struct { int a; int b; }po; int main() { /*myType1 a5; myType2 bo; printf("%d\n",a); printf("%c\n",b);*/ po p;//不需要加struct关键…...

【Linux内核】ashmem pin/unpin

前言 在 Linux 内核的 ASHMEM&#xff08;Android Shared Memory&#xff09;实现中&#xff0c;pin 和 unpin 操作主要用于管理共享内存的生命周期和可用性。这些操作有助于确保在内存使用期间&#xff0c;特定的共享内存区域不会被回收或释放。 Pin 操作 定义 Pin 操作用…...

【docker】docker网络六种网络模式

Docker 网络模式总结 网络模式描述使用场景bridge默认的网络模式&#xff0c;容器之间通过虚拟网桥通信&#xff0c;容器与宿主机隔离。单机部署、本地开发、小型项目host容器与宿主机共享网络堆栈&#xff0c;容器直接使用宿主机的 IP 地址。高性能网络应用、日志处理、大量与…...

永磁同步电机谐波抑制算法(11)——基于矢量比例积分调节器(vector PI controller,VPI controller)的谐波抑制策略

1.前言 相比于传统的谐振调节器&#xff0c;矢量比例积分调节器&#xff08;vector PI controller&#xff0c;VPI controller&#xff09;多一个可调零点&#xff0c;能够实现电机模型的零极点对消。因此VPI调节器也被广泛应用于交流控制/谐波抑制中。 2.参考文献 [1] A. G…...

排序算法中稳定性的意义和作用

多关键字排序&#xff1a;当需要对数据进行多个关键字排序时&#xff0c;稳定性变得非常重要。例如&#xff0c;先按次要关键字排序&#xff0c;再按主要关键字排序。如果排序算法是稳定的&#xff0c;那么在按主要关键字排序后&#xff0c;次要关键字的顺序将被保留。保持关联…...

网站怎么防御https攻击

HTTPS攻击&#xff0c;它不仅威胁到网站的数据安全&#xff0c;还可能影响用户隐私和业务稳定运行。 HTTPS攻击主要分为以下几种类型&#xff1a; 1.SSL劫持&#xff1a;攻击者通过中间人攻击手段&#xff0c;篡改HTTPS流量&#xff0c;从而实现对数据的窃取或伪造。 2.中间人攻…...

gitignore 不起作用

.gitignore不起作用 文件已提交至远程仓库&#xff0c;已经被Git跟踪。清除缓存.gitignore位置可能不是与 .git隐藏文件夹同级目录。将文件移至同级目录缓存未清除 清除缓存 清楚git缓存步骤 进入项目路径 清除本地当前的Git缓存 git rm -r --cached . 应用.gitignore等本地…...

Hive学习基本概念

基本概念 hive是什么&#xff1f; Facebook 开源&#xff0c;用于解决海量结构化日志的数据统计。 基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张表&#xff0c;并提供类SQL查询功能 本质是将HQL转化为MapReduce程序。 Hive处理的数据存储在H…...

在 Ubuntu 使用 fonts-noto-cjk 设置 Matplotlib 支持中文的完整教程

在 Ubuntu 使用 fonts-noto-cjk 设置 Matplotlib 支持中文的完整教程 1. 为什么需要配置中文字体&#xff1f;2. 安装 fonts-noto-cjk安装命令&#xff1a;检查字体安装是否成功 3. 配置 Matplotlib 支持中文3.1 手动加载字体3.2 设置全局字体&#xff08;可选&#xff09;修改…...

《C++ Primer Plus》学习笔记|第10章 对象和类 (24-12-2更新)

文章目录 10.3 类的构造函数和析构函数10.3.2 使用构造函数显式地调用构造函数隐式地调用构造函数使用对象指针 10.3.3默认构造函数10.3.4 析构函数析构函数示例 10.4 this指针三个const的作用 10.5 对象数组10.6 类作用域10.9 复习题1.什么是类&#xff1f;2.类如何实现抽象、…...

SpringMVC接收数据

一、访问路径设置: RequestMapping注解的作用就是将请求的URL地址和处理请求的方式(handler方法)关联起来&#xff0c;建立映射关系;SpringMVC接收到指定的请求&#xff0c;就会来找到在映射关系中对应的方法来处理这个请求 1.精准路径匹配: 在RequestMapping注解指定URL地址…...

Python数组拆分(array_split())

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

Git 使用总结

下载 git bash&#xff1a;http://git-scm.com/download/win 第一次使用 git 时&#xff0c;配置用户信息&#xff1a; git config --global user.email "your.emailexample.com" 从github仓库中下载项目到本地&#xff0c;修改后重新上传&#xff1a; git clone 项…...

NaviveUI框架的使用 ——安装与引入(图标安装与引入)

文章目录 概述安装直接引入引入图标样式库 概述 &#x1f349;Naive UI 是一个轻量、现代化且易于使用的 Vue 3 UI 组件库&#xff0c;它提供了一组简洁、易用且功能强大的组件&#xff0c;旨在为开发者提供更高效的开发体验&#xff0c;特别是对于构建现代化的 web 应用程序。…...

YOLOv11 NCNN安卓部署

YOLOv11 NCNN安卓部署 之前自己在验证更换relu激活函数重新训练部署模型的时候&#xff0c;在使用ncnn代码推理验证效果很好&#xff0c;但是部署到安卓上cpu模式会出现大量的错误检测框&#xff0c;现已更换会官方默认的权重 前言 YOLOv11 NCNN安卓部署 目前的帧率可以稳定…...

多线程安全单例模式的传统解决方案与现代方法

在多线程环境中实现安全的单例模式时&#xff0c;传统的双重检查锁&#xff08;Double-Checked Locking&#xff09;方案和新型的std::once_flag与std::call_once机制是两种常见的实现方法。它们在实现机制、安全性和性能上有所不同。 1. 传统的双重检查锁方案 双重检查锁&am…...

golang debug调试

1. 本地调试 1&#xff1a;Add Configurations 添加配置文件&#xff08;Run kind &#xff1a;Directory&#xff09; 2&#xff1a;进入run运行窗口 3&#xff1a;debug断点调试模式 1. Resume Program (继续运行) 图标: ▶️ 或 ► 快捷键: F9&#xff08;Windows/Linux&a…...

安装 RabbitMQ 服务

安装 RabbitMQ 服务 一. RabbitMQ 需要依赖 Erlang/OTP 环境 (1) 先去 RabbitMQ 官网&#xff0c;查看 RabbitMQ 需要的 Erlang 支持&#xff1a;https://www.rabbitmq.com/ 进入官网&#xff0c;在 Docs -> Install and Upgrade -> Erlang Version Requirements (2) …...

pandas 大数据获取某列所有唯一值

目录 方法1: 方法2: 方法3 处理大数据: 方法1: data.groupby().groups.keys() import pandas as pd# 假设我们有以下的数据 data = {RTDR_name: [A, B, A, C, B, A],value: [1, 2, 3, 4, 5, 6] }# 创建 DataFrame temp_data = pd.DataFrame(data)# 获取 RTDR_name 列的…...

【AI系统】LLVM 架构设计和原理

LLVM 架构设计和原理 在上一篇文章中&#xff0c;我们详细探讨了 GCC 的编译过程和原理。然而&#xff0c;由于 GCC 存在代码耦合度高、难以进行独立操作以及庞大的代码量等缺点。正是由于对这些问题的意识&#xff0c;人们开始期待新一代编译器的出现。在本节&#xff0c;我们…...

Node.js 中的文件系统(fs)模块详解与代码示例

Node.js 中的文件系统&#xff08;fs&#xff09;模块详解与代码示例 Node.js 的 fs 模块提供了与文件系统交互的能力&#xff0c;包括文件的读写、目录的管理等。以下是 fs 模块中一些常用方法的详细解释和代码示例&#xff1a; 1. 异步读取文件内容 作用&#xff1a;异步读…...