Python浅拷贝简析

博客主要围绕Python展开,指出Python和C在赋值上语义不同,Python的“赋值”可理解为“赋引用”。对于可变对象的“赋值”要留意“浅拷贝”,需深入多层进行拷贝直至不变元素,还给出了单层表和两层表相关内容及参考文献。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接上代码…

单层的表

x = [1,3,6]
y = x
z = [1,3,6]
--out--
x [1, 3, 6]
y [1, 3, 6]
z [1, 3, 6]
x[1] = 10
--out--
x [1, 10, 6]
y [1, 10, 6]
z [1, 3, 6]
x.append(20)
--out--
x [1, 10, 6, 20]
y [1, 10, 6, 20]
z [1, 3, 6]
c = x.copy()
x.append(30)
x [1, 10, 6, 20, 30]
c [1, 10, 6, 20]

在这里插入图片描述

两层的表

a1 = [[i+j for i in range(3)] for j in range(3)]
--out--
a1 [[0, 1, 2], [1, 2, 3], [2, 3, 4]]
## 浅拷贝
a2 = a1.copy()
a1[0][0]=5
--out--
#索引为0的这一层未独立出来
a1 [[5, 1, 2], [1, 2, 3], [2, 3, 4]]
a2 [[5, 1, 2], [1, 2, 3], [2, 3, 4]]
#NOTE python 默认只是做了第一层拷贝 因而当改变发生在这一层时 这一层就会独立出来
a1[1] = [5,6,7]
--out--
a1 [[5, 1, 2], [5, 6, 7], [2, 3, 4]]
a2 [[5, 1, 2], [1, 2, 3], [2, 3, 4]]
a1[1][0]=100
--out--
#索引为1的这一层已经独立出来了!!!!!!!!!!
a1 [[5, 1, 2], [100, 6, 7], [2, 3, 4]]
a2 [[5, 1, 2], [1, 2, 3], [2, 3, 4]]
a1[2][0]=100000
--out--
#索引为2的这一层未独立出来  
a1 [[5, 1, 2], [100, 6, 7], [100000, 3, 4]]
a2 [[5, 1, 2], [1, 2, 3], [100000, 3, 4]] 

在这里插入图片描述
Python和C在赋值上有着不同的语义,可以将Python的"赋值"理解为“赋引用”。在一些可变对象的“赋值”上,往往要留意上述这种“浅拷贝”,因而要深入多层进行拷贝(一直做到不变元素)。

参考文献

《程序员学Python》裘宗燕 著

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值