首页 > 编程语言 > 详细

Python之深浅拷贝详解

时间:2020-03-09 20:12:15      阅读:49      评论:0      收藏:0      [点我收藏+]

1、浅拷贝原理

浅拷贝解释:

  是把原列表第一层的内存地址拷贝一份给新列表。对于不可变类型拷贝本身id内存地址给新列表(原列表修改不可变类型的值,新列表不会变),对于可变类型是拷贝可变类型容器本身的id给新列表(原列表修改其中内嵌可变类型的元素值,新列表也会变)

原理图:

技术分享图片

 

 实例:

list=[jesse,zhangsan,[786, 2.23]]
list1=list.copy()
print(list)
print(list1)
print("原列表id:",id(list))
print("拷贝的列表id:",id(list1))
print("原列表内嵌列表id:",id(list[2]))
print("拷贝的列表内嵌列表id:",id(list1[2]))
list[0]=jc
list[2][0]=yuanyuan
print(list)
print(list1)
print("原列表id:",id(list))
print("拷贝的列表id:",id(list1))
print("原列表内嵌列表id:",id(list[2]))
print("拷贝的列表内嵌列表id:",id(list1[2]))
# 执行结果
[jesse, zhangsan, [786, 2.23]]
[jesse, zhangsan, [786, 2.23]]
原列表id: 2557709542024
拷贝的列表id: 2557710045576
原列表内嵌列表id: 2557709541960
拷贝的列表内嵌列表id: 2557709541960
[jc, zhangsan, [yuanyuan, 2.23]]
[jesse, zhangsan, [yuanyuan, 2.23]]
原列表id: 2557709542024
拷贝的列表id: 2557710045576
原列表内嵌列表id: 2557709541960
拷贝的列表内嵌列表id: 2557709541960

2、深拷贝原理:

深拷贝:

  在拷贝时区分原列表可变和不可变类型,对于不可变类型直接将其值的id及内存地址复制给新的列表,对于可变类型则重新生成一个容器id。(多层嵌套也是如此)

原理图:

  技术分享图片

 

 实例:

import copy
list=[jesse,zhangsan,[786, 2.23]]
list1=copy.deepcopy(list)
print(list)
print(list1)
print("原列表id:",id(list))
print("拷贝的列表id:",id(list1))
print("原列表内嵌列表id:",id(list[2]))
print("拷贝的列表内嵌列表id:",id(list1[2]))

list[0]=jc
list[2][0]=yuanyuan
print(list)
print(list1)
print("原列表id:",id(list))
print("拷贝的列表id:",id(list1))
print("原列表内嵌列表id:",id(list[2]))
print("拷贝的列表内嵌列表id:",id(list1[2]))
# 执行结果
[jesse, zhangsan, [786, 2.23]]
[jesse, zhangsan, [786, 2.23]]
原列表id: 2715253531272
拷贝的列表id: 2715253636040
原列表内嵌列表id: 2715253532488
拷贝的列表内嵌列表id: 2715253636104
[jc, zhangsan, [yuanyuan, 2.23]]
[jesse, zhangsan, [786, 2.23]]
原列表id: 2715253531272
拷贝的列表id: 2715253636040
原列表内嵌列表id: 2715253532488
拷贝的列表内嵌列表id: 2715253636104

 

Python之深浅拷贝详解

原文:https://www.cnblogs.com/baicai37/p/12450182.html

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