首页 > 其他 > 详细

深浅拷贝

时间:2019-10-06 22:43:05      阅读:87      评论:0      收藏:0      [点我收藏+]

不用拷贝:

list1=[‘a‘,‘b‘]
list2=list1
list1.append(‘c‘)
print(‘list1‘)
print(list1)
print(‘list2‘)
print(list2)

 结果:技术分享图片

 

 只用单纯的‘=’,没有产生新对象,从始至终用的是一个对象,所以,改变一个所有的都改变

一、浅拷贝:

产生新对象

函数:copy

简单的没有嵌套列表的拷贝

list1=[‘a‘,‘b‘]
list2=list1.copy()
list1.append(‘c‘)
print(‘list1‘)
print(list1)
print(‘list2‘)
print(list2)

 结果:技术分享图片

 

 有嵌套的拷贝:

list1=[‘a‘,‘b‘,[1,2,3,4]]
list2=list1.copy()
list1[2].append(‘100‘)
print(‘list1‘)
print(list1)
print(‘list2‘)
print(list2)

 结果技术分享图片

 

 结论:对于浅拷贝,拷贝时产生新对象,吧拷贝内容复制进去,但是,如果拷贝内容里有地址,拷贝后也用之前的地址,所以改变嵌套里面的值时,拷贝后的也会改变

技术分享图片

 

 二、深拷贝:

函数:deepcopy()

模块:copy

import copy
list1=[‘a‘,‘b‘,[1,2,3,4]]
list2=copy.deepcopy(list1)
list1[2].append(‘100‘)
print(‘list1‘)
print(list1)
print(‘list2‘)
print(list2)

 结果:技术分享图片

 

 结论:深拷贝后产生对象,即使是引用的地址也重产生一个单独引用

技术分享图片

 

 可以看到深拷贝之后两个对象是完全独立的,所以互不干扰

深浅拷贝

原文:https://www.cnblogs.com/jcb9426986/p/11628592.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!