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

python与c++变量赋值的区别

python与c++变量赋值的区别

在C++中,变量赋值的行为与Python有显著不同,主要区别在于变量存储方式赋值语义。以下是详细对比:


1. 基本类型(int, float等)
C++行为
int a = 10;
int b = a;  // 值拷贝(独立内存)
b = 20;     // 修改b不影响a
cout << a;  // 输出10(不变)
  • 直接存储值,赋值是深拷贝(复制值到新内存)
  • 变量名直接绑定到内存地址
Python行为
a = 10
b = a      # b和a引用同一个不可变对象
b = 20     # 创建新对象,不影响a
print(a)   # 输出10
  • 虽然表现类似,但本质是引用不可变对象而非值拷贝

2. 对象/类实例
C++行为
class MyClass { public: int val; };MyClass obj1;
obj1.val = 10;
MyClass obj2 = obj1;  // 默认浅拷贝(成员值复制)
obj2.val = 20;        // 修改obj2不影响obj1
cout << obj1.val;     // 输出10
  • 默认浅拷贝(按成员复制值)
  • 可通过重载=实现深拷贝
Python行为
class MyClass: pass
obj1 = MyClass()
obj1.val = 10
obj2 = obj1      # 引用同一个对象
obj2.val = 20    # 修改会影响obj1
print(obj1.val)  # 输出20
  • 始终是引用传递,赋值不拷贝对象

c++里的引用: int& a=b;,这之后a还能再绑定到其他变量吗?

在C++中,引用(reference)一旦初始化后就不能重新绑定到其他变量,这是与指针(pointer)的关键区别之一。

int x = 10;
int y = 20;
int& a = x;  // 引用a绑定到x(初始化)
a = y;       // 这不是重新绑定!而是把y的值赋给x
  • 初始化即永久绑定:引用在声明时必须初始化,且之后无法更改其绑定的目标
  • 语法糖性质:引用本质是编译器实现的别名(编译后通常等同于指针,但语法上更安全)

但在Python里,a=b之后,a=c,a其实就绑定到c了,所以Python里一切赋值皆引用(虽然不可变对象的后续行为表现为值传递),而且引用了还能再重新绑定。

http://www.xdnf.cn/news/233911.html

相关文章:

  • 【Linux庖丁解牛】—环境变量!
  • 深入解析词嵌入(Word2Vec、GloVe)技术原理:从词语到向量的转变
  • Transformer 模型及深度学习技术应用
  • Langchain+文本摘要-refine
  • Java零基础入门Day3:程序流程控制
  • Flowith:解放思维的AI画布让创意与效率如泉涌
  • 动画震动效果
  • 【Bootstrap V4系列】学习入门教程之 加载必要文件和入门模板
  • javascript 深拷贝和浅拷贝的区别及具体实现方案
  • 【每日八股】复习 Redis Day4:线程模型
  • NLP 分词技术学习
  • 【Dify系列教程重置精品版】第四章:实现Dify的 hello world
  • ISO 26262认证步骤
  • 【Java面试笔记:进阶】30.Java程序运行在Docker等容器环境有哪些新问题?
  • 楼宇智能化三、五章【期末复习】
  • 芯知识|小体积语音芯片方案WTV/WT2003H声音播放ic应用解析
  • 楼宇智能化四章【期末复习】
  • (eNSP)Smart Link配置实验
  • MicroPython for esp32s3开发HX711称重模块指南
  • rk3568 A/B系统 OAT升级 实践
  • 全面了解CSS语法 ! ! !
  • 聊一聊接口自动化测试断言处理策略
  • 用户意图驱动:GEO优化策略之内容精准匹配
  • PID中低通滤波算法的详细讲解
  • 消防岗位技能竞赛流程方案策划
  • verilog_testbench技巧
  • 逻辑回归之参数选择:从理论到实践
  • [FPGA VIDEO IP] VCU
  • Allegro23.1新功能之新型via structure创建方法操作指导
  • 20250430在ubuntu14.04.6系统上完成编译NanoPi NEO开发板的FriendlyCore系统【严重不推荐,属于没苦硬吃】