深浅拷贝和赋值关系

list1 = [1,2,3,4,5,6]
list2 = list1
print(list2)
list1[1]=['tao']
print('list1',list1)
print('list2',list2)

'''
[1, 2, 3, 4, 5, 6]
list1 [1, ['tao'], 3, 4, 5, 6]
list2 [1, ['tao'], 3, 4, 5, 6]
'''

'''
赋值就等于完全共享了资源,一个值的改变会完全被另一个值共享。
然而有的时候,我们偏偏需要将一份数据的原始内容保留一份,再去处理数据,这个时候使用赋值就不够明智了。
python为这种需求提供了copy模块。提供了两种主要的copy方法,一种是普通的copy,另一种是deepcopy。我们称前者是浅拷贝,后者为深拷贝。
'''
import copy
list = [5,6,7]
list3 = [1,2,3,4,list]
list4 = copy.copy(list3)
list3[0] = 'tao'
print('list3:',list3)
print('list4:',list4)
'''
list3: ['tao', 2, 3, 4, [5, 6, 7]]
list4: [1, 2, 3, 4, [5, 6, 7]]
'''

'''

深拷贝就是在内存中重新开辟一块空间,不管数据结构多么复杂,只要遇到可能发生改变的数据类型,就重新开辟一块内存空间把内容复制下来,
直到最后一层,不再有复杂的数据类型,就保持其原引用。这样,不管数据结构多么的复杂,数据之间的修改都不会相互影响。这就是深拷贝~~~
'''

推荐一个比较认同的解释:http://www.cnblogs.com/Eva-J/p/5534037.html

猜你喜欢

转载自www.cnblogs.com/dingyutao/p/9159007.html