python list列表的深拷贝和浅拷贝

list 可变类型:
= 赋值, 引用原来的对象,随原来list变化。
copy() 浅拷贝, 只复制第一层的值,第二层只引用对象, 所以第二层引用会跟随原来list对第二层的改变而变, 第一层不变。
deepcopy() 深拷贝, 复制所有层的值, 和原list是两个完全独立的个体, 原list的任何改变都不会影响新的列表。

代码示例如下:

import copy as cp

a = [1, 2, 3, [4, 5, 6]]
b = a   # "=" 赋值,指向同一内存块
c = a.copy()    # 浅拷贝, 只拷贝第一层, 浅拷贝后a的变动可能影响c的值(第二层改变)
d = cp.deepcopy(a) # 深拷贝, 拷贝所有内容,深拷贝后a的任何变动不会影响d

a[2] = 99       # 列表a的第一层第二个元素“3”的值改为“99”
a[3][0] = 7     # 列表a的第二层第一个元素“4”的值改为“7”

print("a = ", a)
print("b = ", b)
print("c = ", c)
print("d = ", d)

输出:
a = [1, 2, 99, [7, 5, 6]]
b = [1, 2, 99, [7, 5, 6]]
c = [1, 2, 3, [7, 5, 6]]
d = [1, 2, 3, [4, 5, 6]]

分步执行: 箭头代表指针
第一步: 定义一个列表 a
在这里插入图片描述

第二步: b, c , d分别执行赋值, 浅拷贝, 深拷贝
在这里插入图片描述

第三步: 改变嵌套列表a, 第一层第2个元素“3”的值改为99,第二层第1个元素“4”的值改为“7”.
在这里插入图片描述

可点击支持作者,感谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值