深拷贝和浅拷贝

一、浅拷贝

是对于一个对象的顶层拷贝,拷贝引用地址,没有拷贝内容,内存地址一样,共享地址~!

    例子:

a = [1,2,3]

b = [4,5,6]

c = [a,b]

e = c

>>> id(c)

140693012256888

>>> id(e)

140693012256888

clipboard

 

copy.copy

如果是可变类型,只拷贝第一层,id地址不一样,如果是不可变类型,一层都不拷贝直接指向,id地址一样!

 

clipboard

 

clipboard

 

不可变类型:

clipboard

 

clipboard

 

例子:

list1 = [1,2]

list2= list2[:]

list2[0]=1

#list2 变化了,但是list1没有变化,id执行地址不同(只拷贝一层),也是浅拷贝

print(id(list1),id(list2))

#如果有了子列表

list3=[3,4,[1,2]]

list4=list3[:]

list4[2][0]=111

#内存地址还是不一样,因为只拷贝一层,有共同指向子列表,所以list4的子列表变化了,list3的子列表变化了。

 

以下操作会会出现浅拷贝的情况

  • 使用切片[:]操作
  • 使用工厂函数(如list/dir/set)
  • 使用copy模块中的copy()函数

 

二、深拷贝

1、深拷贝

另外创建一份内容出来,id地址不一样。

clipboard

 

clipboard

 

深拷贝:copy.deepcopy()

posted @ 2018-06-26 20:48  码农出来卖卖菜  阅读(114)  评论(0编辑  收藏  举报