鱼C论坛

 找回密码
 立即注册
查看: 297|回复: 24

Python的列表问题

[复制链接]
最佳答案
0 
发表于 2018-6-7 23:23:46 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

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

x
小甲鱼课后作业里面
>>> old = [1, 2, 3, 4, 5]
>>> new = old
>>> old = [6]
>>> print(new)

这道题的答案是 [1,2,3,4,5],为什么呢

难道new不应该跟着变成[6]吗,为什么?
最佳答案
1 
发表于 2018-6-7 23:26:30 | 显示全部楼层
本帖最后由 you2244687 于 2018-6-7 23:32 编辑

刚学。。代码不是从上到下运行嘛.所以第一个old先赋值到了new,然后old又被重新赋值,所以最后new还是=12345,如果print(old)的话应该等于6
最佳答案
0 
 楼主| 发表于 2018-6-7 23:32:09 | 显示全部楼层

这是什么情况。。
最佳答案
1 
发表于 2018-6-7 23:32:25 | 显示全部楼层
VisionY 发表于 2018-6-7 23:32
这是什么情况。。

重新回复了哈哈。。
最佳答案
0 
 楼主| 发表于 2018-6-7 23:33:10 | 显示全部楼层
you2244687 发表于 2018-6-7 23:26
刚学。。代码不是从上到下运行嘛.所以第一个old先赋值到了new,然后old又被重新赋值,所以最后new还是=1234 ...

难道不能理解,new 和 old 都是指向同一个地址吗? 其中一个地址的内容变了,另一个不是一样也要变吗?
最佳答案
1 
发表于 2018-6-7 23:34:20 | 显示全部楼层
楼主再看看我的答案吧,虽然我只学到005
最佳答案
1 
发表于 2018-6-7 23:34:56 | 显示全部楼层
VisionY 发表于 2018-6-7 23:33
难道不能理解,new 和 old 都是指向同一个地址吗? 其中一个地址的内容变了,另一个不是一样也要变吗?

因为代码运行是有顺序的,从上到下
最佳答案
1 
发表于 2018-6-7 23:37:08 | 显示全部楼层
VisionY 发表于 2018-6-7 23:33
难道不能理解,new 和 old 都是指向同一个地址吗? 其中一个地址的内容变了,另一个不是一样也要变吗?

哦我知道你想说啥了,如果要变成6那就应该再输入一个new=old,不然new就没有被重新赋值,所以还是等于123456
最佳答案
0 
 楼主| 发表于 2018-6-7 23:45:21 | 显示全部楼层
you2244687 发表于 2018-6-7 23:37
哦我知道你想说啥了,如果要变成6那就应该再输入一个new=old,不然new就没有被重新赋值,所以还是等于123 ...

还是不懂,给这个你看看,
>>> 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]
>>> list1.sort()
>>> list1
[1, 2, 3, 7, 8, 9]
>>> list2
[1, 3, 2, 9, 7, 8]
>>> list3
[1, 2, 3, 7, 8, 9]
最佳答案
0 
发表于 2018-6-7 23:49:04 | 显示全部楼层
我也是新人,我认为是这样的。
小甲鱼:python并不把值存储在变量中,更像是把名字贴在值上。
old = [1, 2, 3, 4, 5]  #变量old指向[1,2,3,4,5]
new = old #变量new指向[1,2,3,4,5]
old = [6] #变量old指向[6]
上面的赋值操作只是改变了变量的指向
最佳答案
1 
发表于 2018-6-7 23:53:44 From FishC Mobile | 显示全部楼层
VisionY 发表于 2018-6-7 23:45
还是不懂,给这个你看看,
>>> list1 = [1, 3, 2, 9, 7, 8]
>>> list2 = list1[:]

list1 sort那里我看不懂了
最佳答案
0 
 楼主| 发表于 2018-6-8 00:15:36 | 显示全部楼层
occk 发表于 2018-6-7 23:49
我也是新人,我认为是这样的。
小甲鱼:python并不把值存储在变量中,更像是把名字贴在值上。
old = [1,  ...

我也觉得唯一的解法就是 old = [6] 是开辟了新的空间,这样他们指向就不同。但是我们都新手。不能准保这就是正确答案啊。还是等大佬来解释。。现在都稀里糊涂的
最佳答案
0 
 楼主| 发表于 2018-6-8 00:16:41 | 显示全部楼层
you2244687 发表于 2018-6-7 23:53
list1 sort那里我看不懂了

这个是列表里面的一个方法,就是把数字从小到大排列。这个简单。我还是不懂我问的问题
最佳答案
5 
发表于 2018-6-8 09:30:04 | 显示全部楼层
在做完第二步后,你查看一下这两个变量的id。
id(old)
id(new)
此时显示出来的id是一样的。说明,这两个变量名指向了同一个地址空间。
做完第三步后,再查看一下id。
显示出来的id是不一样的,说明,变量old已经被赋于另一个值[6],变量old的地址空间发生改变。而变量new并没有受到影响。
最佳答案
7 
发表于 2018-6-8 10:15:28 | 显示全部楼层
new = old,的意思是new也指向old指向的列表,然后这句代码就没有作用了(已执行完毕),记住,=的意思是赋值
举个简单的例子
  1. a = 5
  2. b = a
  3. a  = 6
复制代码
,b还是5。
最佳答案
12 
发表于 2018-6-8 21:09:31 | 显示全部楼层
old从新赋值也只是old变了个新的值
new还是原来那个数字
最佳答案
1 
发表于 2018-6-8 21:22:35 | 显示全部楼层
百度搜索 copy()方法 ,然后与这个对比下,你会懂得为什么这个new它不变勒
最佳答案
0 
发表于 2018-6-8 23:11:12 | 显示全部楼层
和我问的问题差不多,可以看下我这边http://bbs.fishc.com/thread-116724-1-1.html
我现在的理解是这样的:首先直接赋值的话,相当于new搬进了old家,内存位置是一样的,就像你回复中14#鱼油说的那样,id是一样的。所以old怎么摆放家具,就会导致new的家里呈现什么状态,因为他俩住在一起。但是当old指向[6],列表完全不一样了,他的内存数据就不一样了也就是id变了,相当于old搬家了。但是new还在原来的家呀,所以new家和old家自然就不一样了。
最佳答案
0 
发表于 2018-6-9 06:43:49 | 显示全部楼层
画出逻辑框架,首先是列表赋值给old, 然后old赋值给了new, 再然后他给了old赋值了新的列表[6],赋值操作到此基本结束,最后打印new. 程序中没有再次将old赋值给new,所以最后打印的结果就是[1,2,3,4,5]
最佳答案
73 
发表于 2018-6-9 09:23:11 | 显示全部楼层
本帖最后由 凌九霄 于 2018-6-9 09:32 编辑

第二次的old非原old,同名罢了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号

GMT+8, 2018-8-21 05:00

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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