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

Python和C++赋值共享内存、Python函数传址传值、一些其他的遇到的bug

1、Numpy共享内存的情况:

array1 = np.array([1, 2, 3])
array2 = array1
array2[0] = 0       # array1也会跟着改变,就地操作
array2 = array2 * 2 # array2不会跟着改变,属于非就地操作,会创建一个新的地址给array2
array2 = array1[:]
array2 = array1.view()
array2 = array1.reshape((3, 1))

使用array.copy() 创建深拷贝以避免这种问题

非就地操作:会创建一个新的数组,并将其赋值给 array2(指向的地址发生改变)。在这种情况下,array2 将引用一个新的数组,原来的 array2 不再共享原始的内存。如下,都不会影响到array1:

array2 = -array1 # 有运算时不共享(会创建一个新的数组给array2)
array2[0] = 0    # array1不会跟着改变
array2 = array1		# 共享内存
array2 = array2 + 1 # array1不会改变(此时创建一个新的数组给array2)。但array2 += 1会影响array1,自增是就地(in-place)操作
array2 = array1
array2[0] = -array2[0] # 就地操作,1会改
array2[:] = -array2[:] # 就地操作,1会改
array2 = -array2       # 非就地操作,1不改

2、pytorch共享内存的情况:

和Numpy完全一样

tensor1 = torch.tensor([1, 2, 3])
tensor2 = tensor1
tensor2[0] = 0 # tensor1也会跟着改变
tensor2 = tensor1.view(-1)
tensor2 = tensor1.detach()

使用tensor.clone()创建深拷贝以避免这种问题

3、Eigen中共享内存的情况:

Eigen::MatrixXd matrix1 = Eigen::MatrixXd::Random(3, 3);
Eigen::MatrixXd matrix2 = matrix1.block(0, 0, 2, 2);
Eigen::ArrayXd array1 = Eigen::ArrayXd::Random(5);
Eigen::ArrayXd array2 = array1.segment(1, 3);

直接进行赋值不会共享内存:

Eigen::VectorXd vector1 = Eigen::VectorXd::Random(5);
Eigen::VectorXd vector2 = vector1; // 不共享内存,vector2更改不影响vector1

4、List中共享内存的情况

Python当向列表中添加一个元素时,列表会存储对该元素的引用

a = np.array([1, 2, 3])
list_a = [a]
a[0] = 0 # list_a也会改变

C++中std::vector不会有这种情况:

int main() {Eigen::Vector3d A(0,0,0);std::vector<Eigen::Vector3d> vector_A;vector_A.push_back(A);A(0) = 1;	// vector_A不改std::cout << vector_A[0].transpose() << std::endl;return 0;
}

4、默认拷贝构造函数

C++是浅拷贝,如果有指针会有问题,但没指针的话没啥问题:

#include <iostream>class MyClass {
public:int value;MyClass(int v) : value(v) {}
};int main() {MyClass A(5);MyClass B = A; B.value = 10;std::cout << "修改后的 A 的值:" << A.value << std::endl; // 输出 5std::cout << "修改后的 B 的值:" << B.value << std::endl; // 输出 10return 0;
}

Python当将一个对象赋值给另一个对象时,实际上是创建了对同一个对象的引用

import numpy as npclass MyClass:def __init__(self, num):self.int = numA = MyClass(1)
B = A
B.int = 10 	# A也会被改print(id(A))
print(id(B)) # 地址是一样的!
print("A.array:", A.int)
print("B.array:", B.int)

5、Python函数的传址和传值

不可变对象(如数字、字符串、元组):
当你传递不可变对象给函数时,函数内部对参数的任何修改都不会影响原始对象,类似于值传递的行为。
可变对象(如列表、字典、集合、np.array、torch.tensor):
当你传递可变对象给函数时,函数内部对参数的修改会影响原始对象,类似于引用传递的行为。

import numpy as np
import torchdef modify_immutable(x):x = 100def modify_mutable(lst):lst.append(4)def modify_array(arr):arr[0] = 100def modify_tensor(tensor):tensor[0] = 100a = 3
print("函数调用前的值:", a)
modify_immutable(a)
print("函数调用后的值:", a)  # 不会改变lst = [1, 2, 3]
print("函数调用前的列表:", lst)
modify_mutable(lst)
print("函数调用后的列表:", lst)	# 会改变original_array = np.array([1, 2, 3, 4, 5])
print("调用函数前的原始数组:", original_array)
modify_array(original_array)
print("调用函数后的原始数组:", original_array)	# 会改变original_tensor = torch.tensor([1, 2, 3, 4, 5])
print("调用函数前的原始 Tensor:", original_tensor)
modify_tensor(original_tensor)
print("调用函数后的原始 Tensor:", original_tensor)	# 会改变

6、std::vector<>访问溢出时不会报错,只是会返回垃圾值
RPG代码访问相机类型和个数时,ID错了,但访问却没出错,导致一直没注意他的bug

相关文章:

Python和C++赋值共享内存、Python函数传址传值、一些其他的遇到的bug

1、Numpy共享内存的情况&#xff1a; array1 np.array([1, 2, 3]) array2 array1 array2[0] 0 # array1也会跟着改变&#xff0c;就地操作 array2 array2 * 2 # array2不会跟着改变&#xff0c;属于非就地操作&#xff0c;会创建一个新的地址给array2array2 array1…...

深度解析ONLYOFFICE协作空间2.5版本新功能

深度解析ONLYOFFICE协作空间2.5版本新功能 上个月&#xff0c;4月份&#xff0c;ONLYOFFICE协作空间推出了V2.5版本&#xff0c;丰富了一些很实用的新功能&#xff0c;之前已经有文章介绍过了&#xff1a; ONLYOFFICE 协作空间 2.5 现已发布https://blog.csdn.net/m0_6827469…...

Java I/O模型

引言 根据冯.诺依曼结构&#xff0c;计算机结构分为5个部分&#xff1a;运算器、控制器、存储器、输入设备、输出设备。 输入设备和输出设备都属于外部设备。网卡、硬盘这种既可以属于输入设备&#xff0c;也可以属于输出设备。 从计算机结构的视角来看&#xff0c;I/O描述了…...

【简单介绍下Sass,什么是Sass?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…...

bat脚本—快速修改网络配置

一、bat编写前注意事项 windows桌面用文本文件打开把批命令输入在文本框中&#xff0c;保存采用ANSI编码&#xff0c;后缀用.bat 可参考博客——bat脚本简介学习原理以及具体创建方式 &#xff08;文件扩展名位置&#xff09; 语法准确性&#xff1a;严格遵循 BAT 脚本的语…...

node.js漏洞——

一.什么是node.js 简单的说 Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台。 Node.js 是一个事件驱动 I/O 服务端 JavaScript 环境&#xff0c;基于 Google 的 V8 引擎&#xff0c;V8 引擎执行 Javascript 的速度非常…...

Qt多线程之moveToThread()函数

文章目录 一、moveToThread()执行后&#xff0c;当前代码线程没有改变。二、对象执行moveToThread()后&#xff0c;哪些成员加入了子线程1、创建对象时不指定父对象2、对属性对象使用moveToThread加入子线程作用域3、将属性对象的创建放到子线程中执行 三、C内存模型 在使用“继…...

【WEB前端2024】智体OS:poplang编程控制成本小千元的长续航robot机器人底盘(开源)

【WEB前端2024】智体OS&#xff1a;poplang编程控制成本小千元的长续航robot机器人底盘&#xff08;开源&#xff09; 前言&#xff1a;dtns.network是一款主要由JavaScript编写的智体世界引擎&#xff08;内嵌了three.js编辑器的定制版-支持以第一视角游览3D场馆&#xff09;…...

动态规划法学习

当然&#xff0c;让我们用更生活化的语言和一个实际的例子来解释动态规划&#xff0c;以及如何在实践中应用它。 动态规划通俗理解 想象一下&#xff0c;你是个水果摊老板&#xff0c;每天要决定订购多少苹果&#xff0c;目标是最大化利润。但苹果的价格每天波动&#xff0c;…...

前端技术回顾系列 10|TS 泛型在类和接口中的应用

在微信中阅读,关注公众号:CodeFit。 创作不易,如果你觉得这篇文章对您有帮助,请不要忘了 点赞、分享 和 关注 我的公众号:CodeFit,为我的持续创作提供动力。 上文回顾:约束泛型(Generic Constraints) 上一篇文章我们回顾了 泛型 在 TypeScript 中的高级用法 —— 泛型…...

【Ardiuno】实验ESP32单片机自动配置Wifi功能(图文)

这里小飞鱼按照ESP32的示例代码&#xff0c;实验一下wifi的自动配置功能。所谓的自动配置&#xff0c;就是不用提前将wifi的名称和密码写到程序里&#xff0c;这样可以保证程序在烧录上传后&#xff0c;可以通过手机端的软件来进行配置&#xff0c;可以避免反复修改代码&#x…...

xml数据解析

XML Pull Parser&#xff08;使用Android的XmlPullParser&#xff09; 原理 Pull Parser允许应用程序代码从XML数据中“拉取”事件&#xff0c;而不是像SAX那样通过事件处理程序被“推送”。应用程序代码可以决定何时拉取下一个事件&#xff0c;如开始元素、结束元素或文本内…...

vite工程化搭建vue项目之自动按需导入

背景 当我们在使用vue3组合式开发的时候&#xff0c;大多数情况下我们的代码可能是这样的 <script setup lang"ts"> import { ref, reactive, toRefs, onMounted, computed } from vue; defineProps({}); </script><template><div></di…...

yolo-inference多后端+多任务+多算法+多精度模型 框架开发记录(python版)

先贴出github地址&#xff0c;欢迎大家批评指正&#xff1a;https://github.com/taifyang/yolo-inference 不知不觉LZ已经快工作两年了&#xff0c;由于之前的工作内容主要和模型部署相关&#xff0c;想着利用闲暇时间写一些推理方面的经验总结&#xff0c;于是有了这个工程。其…...

uniapp使用vue3语法构建自定义导航栏,适配小程序胶囊

具体代码 <template><view class"nav-wrapper-container" :style"height:navBarHeight px"><view class"nav-status-container" :style"height:navstatusBarHeight px;" /><view v-if"isCustom" clas…...

wpf、winform 监听USB拔插时触发

C# USB拔插监听 C#查找设备管理器中所有的 USB 设备 wpf、winform 监听USB拔插时触发 监听Windows USB 拔插时触发 private void MainWindow_Loaded(object sender, RoutedEventArgs e){FleckWebSocketConfig.OpenSocketConfig().GetAwaiter(); //websocket 服务开启用于监听W…...

C语言:指针笔试题

// 输入某一年的第几天&#xff0c;计算并输出它是这一年的第几月第几日。 /* 函数功能: 对给定的某一年的第几天&#xff0c;计算它是这一年的第几月第几日。 函数入口参数: 整形变量year,存储年&#xff1b; 整形变量yearDay,存储某一年的第几天&am…...

搜维尔科技:Movella旗下的Xsens在人形机器人开发中得到广泛应用

人形机器人的发展正在全球范围内受到广泛关注。作为机器人领域的重要分支&#xff0c;人形机器人因其具备高度仿真的外观和动作&#xff0c;以及更贴近人类的行为模式&#xff0c;有望逐渐成为人们日常生活和工业生产中的得力助手。在中国&#xff0c;这一领域的发展尤为引人注…...

k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用

文章目录 前言HPA简介简单理解详细解释HPA 的工作原理监控系统负载模式HPA 的优势使用 HPA 的注意事项应用类型 应用环境1.metircs-server部署2.HPA演示示例&#xff08;1&#xff09;部署一个服务&#xff08;2&#xff09;创建HPA对象&#xff08;3&#xff09;执行压测 前言…...

Mock数据

Mock 数据 引入依赖 <dependency><groupId>com.github.jsonzou</groupId><artifactId>jmockdata</artifactId><version>4.3.0</version></dependency>mock 数据 MockConfig mockConfig new MockConfig().sizeRange(1, 1);A.…...

大疆L1点云数据导出后,用CloudCompare做可视化与简单分析的完整流程

大疆L1点云数据从导出到分析&#xff1a;CloudCompare实战全流程指南 当你从DJI Terra中导出L1激光雷达的LAS文件时&#xff0c;真正的数据价值挖掘才刚刚开始。作为测绘工程师或三维建模从业者&#xff0c;如何将这些原始点云转化为可操作的洞察&#xff1f;本文将带你用开源神…...

Element React:革新性UI组件库助力React开发者高效构建企业级应用界面

Element React&#xff1a;革新性UI组件库助力React开发者高效构建企业级应用界面 【免费下载链接】element-react Element UI 项目地址: https://gitcode.com/gh_mirrors/el/element-react 在现代Web应用开发中&#xff0c;界面构建往往占据了开发者大量时间与精力。El…...

英雄联盟LCU工具集:3大核心功能如何提升你的游戏体验?

英雄联盟LCU工具集&#xff1a;3大核心功能如何提升你的游戏体验&#xff1f; 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit Lea…...

这份榜单够用!AI论文网站深度测评与推荐

2026年真正好用的AI论文网站&#xff0c;核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…...

# React 发散创新:从状态管理到组件化架构的极致实践在前端开发领域,React

React 发散创新&#xff1a;从状态管理到组件化架构的极致实践 在前端开发领域&#xff0c;React 已经成为构建现代 Web 应用的事实标准。但你是否曾思考过——如何让 React 不只是“写页面”&#xff0c;而是真正成为驱动业务逻辑的核心引擎&#xff1f; 本文将带你突破常规思…...

Zrlog面试问答及问题解决方案

面试问答 结合 ZrLog 部署&#xff08;Maven 构建 环境配置 服务部署&#xff09;的全流程&#xff0c;整理排查 / 运维 / 开发三类高频问题&#xff0c;覆盖场景、原因、解答思路&#xff0c;可直接用于沟通或故障定位&#xff1a; 一、环境准备阶段高频问题 1. 执行 jav…...

Qwen3.5-4B-Claude-Opus惊艳效果展示:同一问题下普通回答vs结构化推理对比

Qwen3.5-4B-Claude-Opus惊艳效果展示&#xff1a;同一问题下普通回答vs结构化推理对比 1. 模型能力概述 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是一个经过特殊优化的推理模型&#xff0c;它在标准问答能力的基础上&#xff0c;重点强化了结构化分析和分步骤推理…...

Cesium 视角控制全攻略:禁用鼠标交互的多种方法

1. 为什么需要禁用Cesium鼠标交互&#xff1f; 在开发基于Cesium的三维地理信息系统时&#xff0c;我们经常会遇到需要限制用户视角操作的场景。比如在展示固定路线的飞行演示时&#xff0c;如果允许用户随意旋转地图&#xff0c;可能会打乱预设的动画效果&#xff1b;在嵌入式…...

无障碍辅助工具:OpenClaw+GLM-4-7-Flash语音控制电脑操作

无障碍辅助工具&#xff1a;OpenClawGLM-4-7-Flash语音控制电脑操作 1. 为什么需要本地化的语音控制方案 去年夏天&#xff0c;我帮一位因车祸导致手臂骨折的朋友临时搭建了一套语音控制系统。当时市面上主流的语音助手要么需要联网&#xff0c;要么对中文指令的理解能力有限…...

OpenClaw多模型切换:nanobot镜像动态加载不同规格Qwen

OpenClaw多模型切换&#xff1a;nanobot镜像动态加载不同规格Qwen 1. 为什么需要动态切换模型 在本地部署AI助手时&#xff0c;我发现一个痛点&#xff1a;不同任务对模型能力的需求差异很大。简单任务如整理文件、生成周报草稿&#xff0c;用7B参数模型完全够用&#xff1b;…...