鱼C论坛

 找回密码
 立即注册
查看: 625|回复: 8

[已解决]关于课后作业第11讲的

[复制链接]
发表于 2019-4-23 15:57:51 | 显示全部楼层 |阅读模式

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

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

x
>>> list1 = [1, 3, 2, 9, 7, 8]
>>> list2 = list1[:]
>>> list2
[1, 3, 2, 9, 7, 8]
>>> list3 = list1
>>> list3
[1, 3, 2, 9, 7, 8]
那么会有list3 = [1,2,3,7,8,9]

那么若是>>> a = 5
>>> b = a
>>> a = 8
>>> b
输入为什么不是8呢?
最佳答案
2019-4-23 17:12:40
本帖最后由 凌九霄 于 2019-4-23 17:14 编辑
foreverc8 发表于 2019-4-23 16:58
b=a这句赋值语句之前,b也不存在的呀,还有,同一内存地址又是啥意思呢


但是你的a有两次赋值操作啊,所以后面的a已经不是前面的a了,而b则因为赋值的关系,得到了前面那个a的值
在idle下,你输入a=1  回车,然后再输入id(a) 回车,你看到的那串数字就是内存的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-4-23 16:04:10 | 显示全部楼层
本帖最后由 wp231957 于 2019-4-23 16:12 编辑

这里有个先后顺序问题
单纯的b=a  那么a事先并没有赋值,这个表达式没有意义
之后再给a赋值 那和b=a 就没有任何关系了

补充:没看到前面a=5

a=5
b=a  此时变成b=5
a=8  此时b仍然是5 却是不会变成8(因为他俩到现在已经没有关系了)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-23 16:19:47 | 显示全部楼层
本帖最后由 凌九霄 于 2019-4-23 16:23 编辑

一个存在的对象,一旦发生赋值操作,那么新赋值的对象已非原来的对象,只不过跟原对象同名而已。而原对象所占内存空间如果没被其他对象引用,则会被系统垃圾回收机制回收。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-23 16:38:54 | 显示全部楼层
wp231957 发表于 2019-4-23 16:04
这里有个先后顺序问题
单纯的b=a  那么a事先并没有赋值,这个表达式没有意义
之后再给a赋值 那和b=a 就没 ...

关键是我还是没理解上面的拷贝,或者是之前我说的两个点的区别在哪。照你这么说的话,那为什么list3在list1改变后会跟随list1而变化呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-23 16:46:24 | 显示全部楼层
凌九霄 发表于 2019-4-23 16:19
一个存在的对象,一旦发生赋值操作,那么新赋值的对象已非原来的对象,只不过跟原对象同名而已。而原对象所 ...

若是这种操作
>>> list2 = list1
>>> list2
[8, 1, 3, 2, 9, 7]
>>> list1.sort()
>>> list1
[1, 2, 3, 7, 8, 9]
>>> list2
[1, 2, 3, 7, 8, 9]
为何在赋值之后,新赋值的对象还会跟着改变呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-23 16:52:25 | 显示全部楼层
本帖最后由 凌九霄 于 2019-4-23 16:53 编辑
foreverc8 发表于 2019-4-23 16:46
若是这种操作
>>> list2 = list1
>>> list2


1.你这个list1和list2指向同一个内存地址
2.我说第一句话是:一个存在的对象。。。。,你这list2在赋值前并不存在
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-23 16:58:49 | 显示全部楼层
凌九霄 发表于 2019-4-23 16:52
1.你这个list1和list2指向同一个内存地址
2.我说第一句话是:一个存在的对象。。。。,你这list2在赋 ...

b=a这句赋值语句之前,b也不存在的呀,还有,同一内存地址又是啥意思呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-23 17:12:40 | 显示全部楼层    本楼为最佳答案   
本帖最后由 凌九霄 于 2019-4-23 17:14 编辑
foreverc8 发表于 2019-4-23 16:58
b=a这句赋值语句之前,b也不存在的呀,还有,同一内存地址又是啥意思呢


但是你的a有两次赋值操作啊,所以后面的a已经不是前面的a了,而b则因为赋值的关系,得到了前面那个a的值
在idle下,你输入a=1  回车,然后再输入id(a) 回车,你看到的那串数字就是内存的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-23 18:34:01 | 显示全部楼层
建议再看一遍视频
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 05:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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