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