c python java 复制数组 深浅拷贝

本文深入探讨了不同编程语言中浅拷贝与深拷贝的概念,包括Java、C、Python等,通过实例解释了两种拷贝方式的区别及应用场景,帮助读者理解并正确使用拷贝操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java:

直接使用 “=” 复制,浅拷贝,两个数组地址一样,改变其中一个,另一个也变化

int[] a1 = {1, 2,3};
int[] a2 = a1;

a1[0] = 0;
System.out.println(Arrays.toString(a1));   //[0,2,3]
System.out.println(Arrays.toString(a2));   //[0,2,3]

clone() 方法 深拷贝,两个一样的数组,相互没有关系

int[] a1 = {1, 2,3};
int[] a2 = a1.clone();

a1[0] = ,0;
System.out.println(Arrays.toString(a1));   //[0,2,3]
System.out.println(Arrays.toString(a2));   //[1,2,3]

C:

浅拷贝

int a[2]={1,2};
int* b=a;
a[1]=99;
//a {99,2}
//b {99,2}

深拷贝

memcpy() 用来复制内存

      void *memcpy ( void * dest, const void * src, size_t num );

  memcpy() 会复制 src 所指的内存内容的前 num 个字节到 dest所指的内存地址上

    int p1[]= {1,2,3};
	int N=3;
    int *p2= (int *)malloc(sizeof(int) * N);
    //int p2[3];

    memcpy(p2, p1, sizeof(p1[0])*N);
   
   //p2  {1,2,3}

   // for(int i=0;i<3;i++){
   //	printf("%d",p2[i]);
   //}
	

字符串赋值 strcpy(p2,p1)

Python

浅拷贝111 --直接赋值

a=[1,2,3]
b=a
a[0]=0
print(b) #[0,2,3]

浅拷贝222 -- copy浅拷贝

copy浅拷贝,没有拷贝子对象,所以原始数据子对象改变,目标子对象也会改变

import copy
a=[1,2,3, ['a','b']]
b=copy.copy(a)
# a=[1, 2, 3, ['a', 'b']]
# b=[1, 2, 3, ['a', 'b']]

a.append(0)
# a=[1, 2, 3, ['a', 'b'], 0]  
# b=[1, 2, 3, ['a', 'b']]    #没变

a[3]
# ['a','b']
a[3].append('c')
# a=[1, 2, 3, ['a', 'b', 'c'], 5]
# b=[1, 2, 3, ['a', 'b', 'c']] #里面的子对象被改变了

深拷贝 deepcopy

copy.deepcopy() 子对象不变,任何元素都不会发生变化

import copy
#接上面
b=copy.deepcopy(a)

a[3].append('c')
# a=[1, 2, 3, ['a', 'b', 'c'], 5]
# b=[1, 2, 3, ['a', 'b']] #子对象不变,任何都不变

python 函数传参 是值还是引用:

https://blog.youkuaiyun.com/lanshi00/article/details/104563781

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值