Python列表的复制

关于列表的学习:

python删除列表中重复元素_笨小古的博客-CSDN博客_python删除列表重复数据

python中列表的一些操作_笨小古的博客-CSDN博客

1.非复制方法——直接赋值

如果用赋值运算符"="直接赋值例如 a=b,则是一种非复制方法,此时 a 和 b 两个列表是等价的,修改其中任何一个列表都会影响另一个列表。

a = [1, 2, 3]
b = a
print(a)
print(b)
a[0] = 4
print(a)
print(b)
b[1] = 5
print(a)
print(b)

输出:

 可以看出,在执行 b=a 后,a 和 b相当于C/C++中的指针,它们指向相同的空间,此后会同步改变,这种方法没有实现列表的真复制。

2.列表的深复制

列表之间的深复制是通过调用copy模块的deepcopy()实现的,例如 b= copy.deepcopy(a),则无论a有多少层,得到的新列表b都是和原来无关的,这是最安全、最有效的赋值方法。

import copy

a = [1, [1, 2, 3], 4]
b = copy.deepcopy(a)
print(a)
print(b)
b[0] = 3
b[1][0] = 3
a[0] = 9
print(a)
print(b)

输出: 

 3.列表的浅复制

可以使用列表的copy()方法实现列表的浅复制。

a = [1, [1, 2, 3], 4]
b = a.copy()
print(a)
print(b)
b[0] = 3
b[1][0] = 3
print(a)
print(b)

输出:

从输出结果可以看到,对于a的第一层是实现了深复制,但对于嵌套的列表仍然是浅复制。内层的列表保存的是地址,在复制过去的时候是把地址复制过去了。实际上使用列表推导产生新列表也是一个浅复制方法,只对第一层实现深复制,例如以下程序和上述浅复制的结果是相同的:

a = [1, [1, 2, 3], 4]
b = [i for i in a]
print(a)
print(b)
b[0] = 3
b[1][0] = 3
print(a)
print(b)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笨小古

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值