C++, Java, Python中的浅复制举例分析
1. C++ 中的浅复制
C++ 中的浅复制是指将一个对象的所有成员变量复制到另一个对象中,但是不会复制对象中的指针所指向的内存,只是复制指针本身,从而使复制出来的对象和原对象共享内存。比如下面的代码:
class A {
public:
int a;
int *b;
};
int main(){
A a1;
a1.a = 10;
a1.b = new int(20);
A a2 = a1;
cout << a2.a << " " << *a2.b << endl;
return 0;
}
运行结果:10 20
从上面的代码可以看出,a1 和 a2 的成员变量 a 都是 10,a1 和 a2 的指针 b 都指向同一块内存,所以 a2 的指针 b 指向的内存的值也是 20。
2. Java 中的浅复制
在 Java 中,浅复制也是只复制对象的成员变量,而不复制对象中的指针所指向的内存,只是复制指针本身,从而使复制出来的对象和原对象共享内存。比如下面的代码:
public class A {
int a;
int []b;
}
public class Test {
public static void main(String[] args) {
A a1 = new A();
a1.a = 10;
a1.b = new int[]{20};
A a2 = a1;
System.out.println(a2.a + " " + a2.b[0]);
}
}
运行结果:10 20
从上面的代码可以看出,a1 和 a2 的成员变量 a 都是 10,a1 和 a2 的指针 b 都指向同一块内存,所以 a2 的指针 b 指向的内存的值也是 20。
3. Python 中的浅复制
Python 中的浅复制也是只复制对象的成员变量,而不复制对象中的指针所指向的内存,只是复制指针本身,从而使复制出来的对象和原对象共享内存。比如下面的代码:
class A:
def __init__(self):
self.a = 10
self.b = [20]
def main():
a1 = A()
a2 = a1
print(a2.a, a2.b[0])
if __name__ == '__main__':
main()
运行结果:10 20
从上面的代码可以看出,a1 和 a2 的成员变量 a 都是 10,a1 和 a2 的指针 b 都指向同一块内存,所以 a2 的指针 b 指向的内存的值也是 20。
猜您想看
-
如何在软路由中设置远程开关机
软路由如何设置...
2023年04月17日 -
CDN与缓存加速有什么区别
CDN与缓存加...
2023年05月26日 -
热交换Hot Swapping是怎么工作的
热交换Hot ...
2023年05月23日 -
Swoole中怎么搭建TCP服务
搭建TCP服务...
2023年07月21日 -
Java语言的垃圾回收机制以及垃圾回收常用算法
垃圾回收机制垃...
2023年07月22日 -
树莓派中kali如何配置
1、下载Kal...
2023年05月22日