鱼C论坛

 找回密码
 立即注册
查看: 1637|回复: 9

[已解决]请大佬指教

[复制链接]
发表于 2019-11-4 22:20:45 | 显示全部楼层 |阅读模式

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

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

x
我不懂这个,感觉只有对它进行sort,才会改变后面的,请大佬指教
最佳答案
2019-11-4 22:27:25
new 赋值 是在 old 改变之前,
所以 new 不会跟着 old 改变,


还有 列表的  .sort() 方法,改变的是原列表的内容,
所以 list3 == list1
不懂1.PNG
不懂.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-4 22:27:25 | 显示全部楼层    本楼为最佳答案   
new 赋值 是在 old 改变之前,
所以 new 不会跟着 old 改变,


还有 列表的  .sort() 方法,改变的是原列表的内容,
所以 list3 == list1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-4 23:50:32 | 显示全部楼层
本帖最后由 jackz007 于 2019-11-5 00:08 编辑
  1. >>> list1 = [1 , 3 , 2 , 9 , 7 , 8]  # list1 指向列表 [1 , 3 , 2 , 9 , 7 , 8]
  2. >>> list2 = list1[:]                 # list2 指向列表 [1 , 3 , 2 , 9 , 7 , 8] 的副本,其实是另外新建了一个与 list1 完全相同的列表对象
  3. >>> list3 = list1                    # list3 与 list1 一起指向列表 [1 , 3 , 2 , 9 , 7 , 8]
  4.                                      # 至此,内存中一共有两个完全相同,却彼此独立的列表[1 , 3 , 2 , 9 , 7 , 8],
  5.                                      # list1、list3 指向了一个,list2 指向了另一个
复制代码


        通过内建函数 id() 可以证明变量与列表对象之间的隶属关系
  1. >>> id(list1)
  2. 17461120
  3. >>> id(list3)
  4. 17461120
  5. >>> id(list2)
  6. 17460880
复制代码

        以 list1 为句柄,用列表的方法修改对象,list3 会同步改变,因为它们指向了相同的对象;同样的道理,list2 却维持原样,因为它指向另外一个对象:
  1. >>> list1 . sort()
  2. >>> list1
  3. [1, 2, 3, 7, 8, 9]
  4. >>> list3
  5. [1, 2, 3, 7, 8, 9]
  6. >>> list2
  7. [1, 3, 2, 9, 7, 8]
复制代码

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

使用道具 举报

发表于 2019-11-5 06:48:52 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-5 10:34:22 | 显示全部楼层
13572044595 发表于 2019-11-4 22:27
new 赋值 是在 old 改变之前,
所以 new 不会跟着 old 改变,

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

使用道具 举报

 楼主| 发表于 2019-11-5 12:31:44 | 显示全部楼层
13572044595 发表于 2019-11-4 22:27
new 赋值 是在 old 改变之前,
所以 new 不会跟着 old 改变,

那list3赋值也在list1改变前了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-5 12:54:00 | 显示全部楼层
最后的魁拔 发表于 2019-11-5 12:31
那list3赋值也在list1改变前了


我按你自己的例子打个比方:
list1 是一个盒子上的一个标签
这个盒子里按顺序装了[1,2,5,7,1,2,3]这几张纸牌
list3 = list1这个操作就相当于
你在这个盒子上又贴了一个list3的标签

所以当你在对贴有list1标签的盒子里的纸牌整理排序的时候
list3这个标签还在这个盒子上,所以
list3的内容会跟着list1变

list4 list5前面都同理
一开始也都同样贴在同一个叫做[4545,451,48,15]这个盒子上
但是list4 = [55]这个操作
相当于把list4这个标签从之前[4545,451,48,15]这个盒子上撕掉
然后贴在了装有[55]的另外一个盒子上

但之前[4545,451,48,15]这个盒子 list5这个标签还在
所以你在访问list5的时候,还是指向原来[4545,451,48,15]这个盒子

但当你访问list4的时候,它已经指向[55]这个盒子了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-11-5 14:31:00 | 显示全部楼层
我也是小白,我猜测这个和数据库指向有关系,以后慢慢研究,先记下这个规律
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-6 18:44:08 | 显示全部楼层
在Python里面,变量是什么,需要思考下,其实我们更加应该,把变量想象成一个箭头,指向内存里面的一个数据

  1. a = [1,2,3]
  2. b = a
复制代码

如上,是把a这个箭头指向[1,2,3],这边一块内存空间
  1. a = [1,3,2]
  2. b = a
  3. a.sort()
  4. print(b)
  5. a.append(5)
  6. print(b)
  7. a.remove(2)
  8. print(b)
复制代码


不管你对列表进行什么操作,在变量的箭头没有指向新的地方时候,b都是随时而变的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-6 22:58:23 | 显示全部楼层
最后的魁拔 发表于 2019-11-5 12:31
那list3赋值也在list1改变前了


我不是说了嘛,
列表的  .sort() 方法,改变的是 原列表
也就是 最上面的那个 list1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 16:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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