Python 深浅拷贝
1.浅拷贝
s=[1,2,3] s2=s.cope() s2[0]=4 print(s) #[1,2,3] print(s2) #[4,2,3]
如果使用cope函数则是浅拷贝,改变其中一个的值另一个不受影响(仅限于不可变类型的变量),因为两者所指向的内存地址不一样。
s=[[1,2],3,4] s2=s.cope() s2[1]=4 print(s) #[[1,2],3,4] print(s2) #[[1,2],4,4]
如果使用cope函数则是浅拷贝,改变其中一个的值另一个不受影响(仅限于不可变类型的变量),因为两者所指向的内存地址不一样。当改变不可变类型的变量的值时,指向的内存地址会指向新的地址,另外一个不受影响,仍然指向原先的内存地址。
s=[[1,2],3,4] s2=s.cope() s2[0][0]=4 print(s) #[[4,2],3,4] print(s2) #[[4,2],3,4]
如果使用cope函数则是浅拷贝,改变其中一个的值另一个会受影响(仅限于可变类型的变量),因为两者所指向的内存地址一样,不一样的是指向的内存地址里面存放着小裂变元素的两个地址,当改变小列表元素的值时,不会分配新内存空间,故两者皆受影响
与赋值操作的不同
s=[[1,2],3,4]
s2=s
当改变其中任意一个列表的元素的值时,另一个列表也会跟着改变,因为两者共享一块内存地址。
而浅拷贝不共享一块内存地址。
与普通赋值不同的是,当可变类型改变其中的值时不会分配新内存空间,不可变类型改变其中的值时会分配新的内存空间。
浅拷贝只是拷贝第一层。
2.深拷贝
赋值 克隆一份
浙公网安备 33010602011771号