鱼C论坛

 找回密码
 立即注册
查看: 1499|回复: 3

[已解决]python列表切片

[复制链接]
发表于 2021-6-27 19:25:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
还是不懂为什么list2不变 list3会变(>_<) F510500A-FA6F-40BF-9FA1-9E984A27F89E_4_5005_c.jpeg 0A291387-D8EA-4C7A-9869-CE7003C9A0B2.jpeg
最佳答案
2021-6-27 19:33:02

列表是可变序列,当你直接对可变数据赋值到一个新的变量时

只是将新的变量名指向原先的数据,相当于重新取了个别名

例如你这里不进行切片直接赋值,只是将两个变量 list1、list2 指向同一个内存地址

所以只要这个内存地址的数据发生改变,自然所有指向这个内存地址的变量都会发生变化

而你用列表切片,或者 copy() 函数,是将列表进行重新拷贝,生成新的一个列表

即在内存重新开辟一个地址给新的拷贝列表,最后新的变量就指向这个新的列表,而不是拷贝前的列表

你可以用 id 函数进行打印他们的内存地址,看看是否相同就知道是不是指向相同的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-27 19:29:00 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-27 19:33:02 | 显示全部楼层    本楼为最佳答案   

列表是可变序列,当你直接对可变数据赋值到一个新的变量时

只是将新的变量名指向原先的数据,相当于重新取了个别名

例如你这里不进行切片直接赋值,只是将两个变量 list1、list2 指向同一个内存地址

所以只要这个内存地址的数据发生改变,自然所有指向这个内存地址的变量都会发生变化

而你用列表切片,或者 copy() 函数,是将列表进行重新拷贝,生成新的一个列表

即在内存重新开辟一个地址给新的拷贝列表,最后新的变量就指向这个新的列表,而不是拷贝前的列表

你可以用 id 函数进行打印他们的内存地址,看看是否相同就知道是不是指向相同的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-27 20:34:26 | 显示全部楼层
这是列表的深拷贝和浅拷贝,可以百度详细了解下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 06:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表