浅拷贝与深拷贝

浅拷贝只是保存了地址,没有保存值
a = [1,2,3,4]
b= a
id(a)!=id(b) #是因为,开辟了新的地址,地址存放着数据 [1,2,3,4] 里面存放的也是地址
a[0]=5 #此时 id(a[0])=id(b[0]) 因为地址是相同的
  浅拷贝只是把数据的地址保存了,并没有保存数据本身,当列表中如果有元素为可变的列表或字典类时,因为拷贝的是列表或字典所对应的地址,如果列表或字典中有元素发生改变,则浅拷贝的列表也会跟着改变,不能保证数据的独立性。

  深拷贝是比浅拷贝更近了一步,不仅拷贝了地址,也拷贝了数值!
深拷贝相当于在内存中开辟了一片新的内存,不再用来保存数据的地址,而是用新的地址来保存相同的数据。 也就是说,和原来的没有任何关系,是一种完全copy。
>>> import copy
>>> a= [1,2,3]
>>> b =copy.deepcopy(a)
>>> b
[1, 2, 3]
>>> a[1] = 1
>>> b
[1, 2, 3]

 

posted @ 2018-07-06 22:49  十七楼的羊  阅读(143)  评论(0编辑  收藏  举报