Python 浅拷贝与深拷贝,copy模块

python中的任何变量都是对象(引用类型)。

python中的变量分为可变类型和不可变类型。(浅拷贝和深拷贝都是拷贝可变类型内容,不可变类型不会拷贝)

 

注意:因为元组是不可变类型,所以元组的浅拷贝并不会拷贝任何内容,而是直接引用源元组(和=赋值等同)。

如果元组中的元素都是不可变类型,那么元组的深拷贝也并不会拷贝任何内容,而是直接引用源元组;但是如果元组中的元素有可变类型,那么深拷贝才会真正的去深拷贝元组以及元组中的可变元素。

列表、字典的切片([0,1,2][:])和浅拷贝相同。字典的copy()函数也是浅拷贝。

注意:因为不可变类型的变量不会改变,所以不会拷贝任何不可变类型的变量,都是直接引用不可变类型。

 

demo.py(浅拷贝与深拷贝):

import copy  # 导入copy模块


a = [11,22];
b = [33,44];

list_1 = [a,b];

list_2 = list_1;   # 赋值语句。 不会拷贝,只会将list_1的引用给变量list_2
list_3 = copy.copy(list_1);   # 浅拷贝。 只会拷贝最顶层(列表),列表中的元素不会拷贝。
list_4 = copy.deepcopy(list_1);  # 深拷贝。 除了拷贝列表外,列表中的所有可变元素也会拷贝一份。


print(id(list_1))  # 140338425038856
print(id(list_2))  # 140338425038856  赋值语句不会拷贝,和list_1引用一样
print(id(list_3))  # 140338449044936  浅拷贝,只拷贝列表,列表中的元素不拷贝
print(id(list_4))  # 140338425040008  深拷贝,拷贝列表,列表中的可变元素也会拷贝

print(id(list_1[0]))  # 140338425039944
print(id(list_3[0]))  # 140338425039944  浅拷贝,列表中元素的引用与源引用一样
print(id(list_4[0]))  # 140338425039432  深拷贝,列表中可变元素的引用与源引用不一样

# list_1 = "xxxx"    # 修改list_1变量不会影响list_2,list_3和list_4
# list_1.append("xx")  # 修改源列表会影响list_2,不会影响list_3和list_4
# list_1[0].append("xxx")  # 修改源列表中的可变元素会影响list_2,list_3;但不会影响list_4

print(list_1)
print(list_2)
print(list_3)
print(list_4)


 

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值