笨鸟编程-零基础入门Pyhton教程

 找回密码
 立即注册
查看: 8000|回复: 4

[已经解决] 高手帮忙看一下这个列表拷贝问题

[复制链接]

新手上路

Rank: 1

积分
13
发表于 2022-3-6 12:43:44 | 显示全部楼层 |阅读模式
>>> old = [1, 2, 3, 4, 5]
>>> new = old
>>> old = [6]
>>> print(new)

运行结果
[1, 2, 3, 4, 5]


为什么他会打印[1, 2, 3, 4, 5]
他没有用分片拷贝,再修改old的时候,不应该new也要跟着改变吗
123459300已获得悬赏 10 C币

最佳答案

可以这样理解 现在有[1,2,3,4,5]这样一组数据 我告诉你他既叫old也叫new 然我现在告诉你:从现在开始[6]叫old(言外之意就是只有6能叫old,而12345不能再叫old了,只能叫new) 所以old出来是6,new出来是12345 所以说 ...
回复

使用道具 举报

发表于 2022-3-6 12:44:09 | 显示全部楼层

old重新赋值,指向了新的区域,new没变
回复

使用道具 举报

发表于 2022-3-6 12:44:28 | 显示全部楼层
分片是修改内部元素才不修改,你是直接把标签换了
回复

使用道具 举报

新手上路

Rank: 1

积分
19
发表于 2022-3-6 12:44:39 | 显示全部楼层
可以这样理解
现在有[1,2,3,4,5]这样一组数据
我告诉你他既叫old也叫new
然我现在告诉你:从现在开始[6]叫old(言外之意就是只有6能叫old,而12345不能再叫old了,只能叫new)
所以old出来是6,new出来是12345

所以说,这是给字符串取名字的故事,字符串是本体,名字是可变的,我可以给同样内容的一个字符串取好几个名字,也可以把一个名字从字符串A划分给字符串B而不改变字符串的内容
回复

使用道具 举报

新手上路

Rank: 1

积分
17
发表于 2022-3-6 12:45:02 | 显示全部楼层

>>> old = [1, 2, 3, 4, 5]
>>> new = old
>>> old = [6]
>>> print(new)

old = [6] 是重新赋值,它的存储区域已经改变,生成一个新的ID
new = old new的存储ID是第一行old的ID
如果是对第一行old的修改,如old.append(6),那么是在原old 存储ID上的数据进行修改,也就是old列表添加了6这个元素,
因为new和原old的存储ID是一样的,也就是指向同一个标签,原old添加之后,就是标签改变了,所以new也会变成[1,2,3,4,5,6]
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )

GMT+8, 2024-12-26 22:01 , Processed in 0.018693 second(s), 25 queries .

© 2001-2020

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