C++ 和 Python 的赋值操作("=")的区别
C++ 的赋值操作总是默认执行拷贝
拷贝出来的副本与原来变量的地址不同
除非是指针拷贝给指针的浅拷贝才会指向相同地址
auto a = b; 改变b之后并不会改变a
Python赋值分两种情况,对于a = b,
可变类型的赋值默认使用引用方式(可变类型包括列表、字典、自定义类等;a和b指向相同内存,改变b之后a也会跟着改变)
不可变类型的赋值默认使用拷贝方式(不可变类型包括字面值, tuple等;a和b地址不同,b的改变不影响a)
关于两者区别的思考
Python的等号操作,对于可变类型,默认以引用方式赋值,主要原因应该在于节省时空开销,
可变类型如列表、字典、数组、自定义类等,其占用内存空间有可能非常大,如果非要拷贝到新地址中,内存空间需要新开辟一份,且拷贝操作也需要花时间,在大数据量的情况下时间和空间开销都可能非常大;
引用方式则可以节省掉上述的开辟新空间以及拷贝操作。把默认方式设置为合理高效的方式,可以节省人类精力,使人机交互更加方便
引用计数器记录一个对象被引用多少次,直到引用次数为0则销毁该对象,节省内存
非要copy的话,可以用a = copy.deepcopy(b)
C++ 的等号操作,默认拷贝赋值,原因可能在于C++是相对底层一些的语言,需要靠开发者来发挥操作自由度, 根据实际情况设计对应的高效合理的方式
想要用引用的方式来避免拷贝的话,可以用"&"符号,比如 auto& a = b;
————————————————
版权声明:本文为CSDN博主「莫翰轩 MoDonald」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43414513/article/details/121591086