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.深拷贝

赋值  克隆一份

 

posted on 2018-01-10 00:45  可爱的春哥  阅读(178)  评论(0)    收藏  举报

导航