欢迎来到Louis的博客

人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。
扩大
缩小

python 深浅拷贝

python 的基础数据类型中,list,dict,set(不可哈希) 这三个类型都有一个copy方法,今天我们看下这个copy方法

拿list 列举:

在list中 copy方法 及[:]的方式叫做浅copy,只会复制数据的第一层,嵌套在内存的数据还是指向同一个内存地址。

a = [1,2,[1,2,3,[1,2,3,[1,2,3,[1,2,3]]]]]

b = a.copy()
c = a[:]
#列表第一层
print("第一层")
print(id(a))
print(id(b))
print(id(c))

#列表第二层
print("第二层")
print(id(a[2]))
print(id(b[2]))
print(id(c[2]))

#列表第三层
print("第三层")
print(id(a[2][3]))
print(id(b[2][3]))
print(id(c[2][3]))

#结果
第一层
2007342659528
2007342659464
2007342659400
第二层
2007342659592
2007342659592
2007342659592
第三层
1782606896
1782606896
1782606896

除了列表第一层的地址是不同的,列表内部的嵌套数据都是指向用一个地址。

import copy

a = [1,2,[1,2,3,[1,2,3,[1,2,3,[1,2,3]]]]]
b = copy.deepcopy(a)

#列表第一层
print("第一层")
print(id(a))
print(id(b))

#列表第二层
print("第二层")
print(id(a[2]))
print(id(b[2]))

#列表第三层
print("第三层")
print(id(a[2][3]))
print(id(b[2][3]))

#结果
第一层
1360314447816
1360314447752
第二层
1360314447880
1360314447688
第三层
1360314447944
1360314447624

使用deepcopy 生成的新对象,是完全的另一个对象,外层和内存的元素都是新的内存地址。

posted on 2018-08-04 19:29  Louiszj  阅读(97)  评论(0编辑  收藏  举报

导航