鱼C论坛

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

为什么列表p要单独用copy函数才能复制出一个新的列表,而数值直接赋值就可以

[复制链接]
发表于 2024-4-9 10:13:35 | 显示全部楼层 |阅读模式

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

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

x
如下一段演示,直接用赋值使q=p列表,更改q,p也会一起更改,当时用赋值使p=i数字,p做加减并不会影响i的数值,为什么
p = [1,2,3,4,5]
q = p
q
[1, 2, 3, 4, 5]
q.pop()
5
q
[1, 2, 3, 4]
p
[1, 2, 3, 4]
i = 5
p = i
p = p - 1
p
4
i
5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-9 10:13:53 | 显示全部楼层
这是因为列表和数字在Python中是不同类型的对象。

当你将一个列表赋值给一个变量时,实际上该变量保存的是对列表对象的引用(或者说指针),而不是实际的列表数据。所以当你使用变量操作列表时,实际上是通过引用找到了原始列表,所以原始列表也会受到影响。

而对于数值,赋值操作实际上是将数值的值复制给了变量,而不是引用。所以当你改变变量的值时,原始数值并不会受到影响。

如果你想复制一个列表并创建一个新的、独立的列表对象,可以使用`copy`函数来复制。这样,即使你对复制后的列表进行操作,原始列表也不会受到影响。

下面是使用`copy`函数复制列表的示例代码:
p = [1, 2, 3, 4, 5]
q = p.copy()

q.pop()
print(q)  # 输出:[1, 2, 3, 4]
print(p)  # 输出:[1, 2, 3, 4, 5]

希望能够解答你的疑问!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-9 12:29:19 | 显示全部楼层
本帖最后由 jackz007 于 2024-4-9 12:38 编辑
p = [1, 2, 3, 4, 5]      # p 成为可变对象
q = p                    # 将对象 p 映射为 q,p、q 是同一个对象个体。
q = 5                    # q 与 p 脱离映射关系,成为另一个对象
q = p . copy()           # 将对象 p 复制为 q,p、q 是两个对象个体
                             
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-9 17:57:11 | 显示全部楼层
本帖最后由 Stubborn 于 2024-4-9 18:06 编辑

你有一个误区在这里了

直接用赋值使q=p列表,更改q,p也会一起更改
p = [1,2,3,4,5]
q = p
q
[1, 2, 3, 4, 5]
q.pop()
5
q
[1, 2, 3, 4]
p
[1, 2, 3, 4]

当时用赋值使p=i数字,p做加减并不会影响i的数值
i = 5
p = i
p = p - 1
p
4
i
5


p = p - 1 这里是对P的重新赋值,肯定不会影响到I值,能理解吗

为什么列表p要单独用copy函数才能复制出一个新的列表,而数值直接赋值就可以

关于这个问题,不一定需要用copy,相对数字直接赋值,,列表直接赋值格式应该是对应这样的。copy,是复制一块内存,到另外一块内存。应该这样理解

p = [1,2,3,4,5]
q = [1,2,3,4,5]

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 08:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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