网站正在建设中视频,百色高端网站建设,制作重庆城市的网页,手机单页网站模板大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码
Python 列表的切片和赋值操作很基础#xff0c;之前也遇到过一些坑#xff0c;
但今天刷 Codewars 时发现了一个更大的坑#xff0c;故在此记录。
Python 列表赋值之前也遇到过一些坑
但今天刷 Codewars 时发现了一个更大的坑故在此记录。
Python 列表赋值复制“值”还是“引用”
很多入门 Python 的人会犯这样一个错误在赋值操作中搞不清是赋了“值”还是“引用”。
比如
a [1, 2, 3]
b a
b[0] 10 # 更改列表 b 的第一个元素但 a 现在也被更改为了 [10, 2, 3]他可能只想改变列表b但实际上这样也会改变列表a。
因为b实际上是列表a的另一个引用a和b是同一个对象id(a) id(b)所以更改b也会更改a。
这个应该大部分人都知道。
所以正确的代码应该使用切片来进行列表的复制 遇到问题没人解答小编创建了一个Python学习交流QQ群702813599
寻找有志同道合的小伙伴互帮互助,群里还有不错的视频学习教程和PDF电子书a [1, 2, 3]
b a[:] # 使用切片进行列表复制
b[0] 10 # 此时 a 和 b 是两个不同的对象二维列表引发的思考列表的本质
好的现在我们确定切片能够进行列表的复制。
那我们就能心安理得地改动新的列表了吗
请看二维列表二维数组
a [[1, 2, 3], [4, 5, 6]]
b a[:]
b[0][0] 10此时a还是被改动了
原因是虽然id(a) id(b)为Falsea和b确实不是同一个对象。
但它们的元素都是同一个对象——id(a[0]) id(b[0])id(a[1]) id(b[1])。因为列表里存储的是对象的引用
列表 list 终究只是个容器。
就像 tuple 本身是 immutable 不可变的但它只是容器它可以存储一个可变对象因此呈现出一种可以被改动的“假象”。
例如 遇到问题没人解答小编创建了一个Python学习交流QQ群702813599
寻找有志同道合的小伙伴互帮互助,群里还有不错的视频学习教程和PDF电子书a ([1],)a[0][0] 2a
([2],)所以容器和它存储的对象不能混为一谈。
所以对于这种二维列表想要进行完全的复制请直接使用copy.deepcopy()深度复制。
如果只想复制一部分切片那可以先复制再切片 import copya [[1, 2, 3], [4, 5, 6], [7, 8, 9]]b copy.deepcopy(a)[1:]b[0][0] 100 a
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]b
[[100, 5, 6], [7, 8, 9]]此时修改b没有影响到a。
尾语
好了今天的分享就差不多到这里了
对下一篇大家想看什么可在评论区留言哦看到我会更新哒(ง •_•)ง
喜欢就关注一下博主或点赞收藏评论一下我的文章叭 最后宣传一下呀~ 更多源码、资料、素材、解答、交流 皆点击下方名片获取呀