鱼C论坛

 找回密码
 立即注册
查看: 1394|回复: 5

为什么和下面b 跟随a 变化 上面的却不会呢

[复制链接]
发表于 2020-6-30 15:35:15 | 显示全部楼层 |阅读模式

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

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

x
>>> a=[5,2,3]
>>> b=a
>>> a=[4,6,7]
>>> b
[5, 2, 3]

为什么和下面b  跟随a 变化   上面的却不会呢
>>> a=[5,2,3]
>>> b=a
>>> a.sort()
>>> b
[2, 3, 5]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-30 15:45:06 | 显示全部楼层
本帖最后由 Twilight6 于 2020-6-30 15:48 编辑



下面说的别名 就像人的外号,你这样理解可能更好理解哈~~

>>> a=[5,2,3]
>>> b=a
>>> a=[4,6,7]
>>> b
[5, 2, 3]


这里 a = [5,2,3]  实际上是给列表 [5,2,3] 取了一个别名 a ,来代表这个列表

而你后面重新令  b  = a  实际上可以看成  b  = [5,2,3] ,此时你还是为列表 [5,2,3] 取了一个别名 b

而你后来重新将a重新赋值也就是 a = [4,6,7] 那么就将原本列表 [5,2,3] 的 a 别名 给了 列表 [4,6,7] 导致 原本列表没有了 [5,2,3]的别名

而 b 还是属于列表 [5,2,3]的别名 所以 a 的重新赋值 并不会影响 b

Python 中列表的绝大多数方法是在列表本身上进行改变的

比如 sort()、append()、extend()、remove()、reverse()等,是在列表本身进行改变噢


所以我们来看看代码:
>>> a=[5,2,3]
>>> b=a
>>> a.sort()
>>> b
[2, 3, 5]


同上这里的 列表 [5,2,3] 被取了俩个别名 a 、b

而且源头都是指向列表 [5,2,3] 的 , 所以只要其中一个的元素发生改变,那么另外一个也会发生改变,因为 a 、 b 指的都是同一个列表

所以使用sort 排序,会在整个列表上进行改变,所以与这个列表有关的也全部随之改变



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

使用道具 举报

发表于 2020-6-30 15:47:34 | 显示全部楼层
因为第一种方法的含义是新建一个同名列表 a,此时 的 a 已经不是之前的了

第二种方法时真真的“更改列表”,此时 的 a 还是之前的 a,所以 b 也会更着改变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-30 15:49:41 | 显示全部楼层
Twilight6 发表于 2020-6-30 15:45
下面说的别名 就像人的外号,你这样理解可能更好理解哈~~

我感觉get到了一个‘商机’
这个问题出现3次了,固定个回答,每次copy下,哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-30 15:50:59 | 显示全部楼层
yhhpf 发表于 2020-6-30 15:49
我感觉get到了一个‘商机’
这个问题出现3次了,固定个回答,每次copy下,哈哈哈




我经常这样做....

  只要让鱼油听得懂就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-1 19:21:45 | 显示全部楼层
yhhpf 发表于 2020-6-30 15:49
我感觉get到了一个‘商机’
这个问题出现3次了,固定个回答,每次copy下,哈哈哈

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 16:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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