找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3286|回复: 6

[求助] 关于使用sort函数排序后列表整体赋值的问题,指向地址有....

2

主题

9

帖子

9

积分

贫民

积分
9
liqiochi 发表于 2017-11-18 14:39:48 | 显示全部楼层 |阅读模式
才在学习Python,发现一个问题:
x=[4,6,2,1,7,9]
x.sort()
y=x


print(y)
print(x)


输出:
[1, 2, 4, 6, 7, 9]
[1, 2, 4, 6, 7, 9]


但是如果这些写:
x=[4,6,2,1,7,9]
y=x.sort()


print(y)
print(x)


输出:
None
[1, 2, 4, 6, 7, 9]


按理说,y=x.sort(),y就直接指向了x排序后的新地址了,应该就是新值了,怎么感觉还是指向的老地址?“=”的优先级应该低于句号“.”的优先级吧?
回复

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2017-11-18 15:33:28 | 显示全部楼层
y=x并没有创建新的list,x,y指向的是同一个对象,要用copy(),如果是多层次嵌套的要用deepcopy()。
回复 支持 反对

使用道具 举报

2

主题

9

帖子

9

积分

贫民

积分
9
liqiochi  楼主| 发表于 2017-11-18 16:47:08 | 显示全部楼层
sheeboard 发表于 2017-11-18 15:33
y=x并没有创建新的list,x,y指向的是同一个对象,要用copy(),如果是多层次嵌套的要用deepcopy()。 ...

但是y=x.sort(),y指向的是x排序后的地址,而x是原址排序,所以x的地址没变但内容变了,那么因为y指向x的地址,y就不应该为none。我是这么理解的,但是我不知道哪里有问题。而且把y=x.sort()分开写成两行:
x.sort()
y=x
则y的内容和x是一致的,合并写就不一致。
回复 支持 反对

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2017-11-18 17:42:15 | 显示全部楼层
我记得是y=sorted(x),不知道python3里一样不一样.
回复 支持 反对

使用道具 举报

2

主题

9

帖子

9

积分

贫民

积分
9
liqiochi  楼主| 发表于 2017-11-18 18:10:26 | 显示全部楼层
sheeboard 发表于 2017-11-18 17:42
我记得是y=sorted(x),不知道python3里一样不一样.

我用的是Python3.6.2
回复 支持 反对

使用道具 举报

2

主题

219

帖子

219

积分

版主

Rank: 7Rank: 7Rank: 7

积分
219

热心会员默默耕耘优秀版主

剑心无痕 发表于 2017-11-20 08:46:45 | 显示全部楼层
liqiochi 发表于 2017-11-18 18:10
我用的是Python3.6.2

help(list.sort)
sort(...)
    L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*
list的sort函数无返回值

help(sorted)
sorted(iterable, key=None, reverse=False)
    Return a new list containing all items from the iterable in ascending order.
内置函数sorted才是返回list,输入只需要是可遍历的类型就行
回复 支持 反对

使用道具 举报

2

主题

9

帖子

9

积分

贫民

积分
9
liqiochi  楼主| 发表于 2017-11-20 11:05:28 | 显示全部楼层
剑心无痕 发表于 2017-11-20 08:46
help(list.sort)
sort(...)
    L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*

竟然是这样,我一直以为y=x.sort()是y指向x排序后的地址的意思呢。谢谢啦。
回复 支持 反对

使用道具 举报

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

本版积分规则

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