请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

身份运算符疑问

>>> id({2,1,3})
93757112
>>> id({1,2,3})
93757112
>>> {1,2,3} is {2,1,3}
False

这个是什么原因呢?

正在回答 回答被采纳积分+3

4回答

Invistada 2018-02-03 19:28:51

老师,我彻底懵了。

https://img1.sycdn.imooc.com//szimg/5a7598030001a17d09531047.jpg

图中a和b的id不一样是没什么疑问的;

但{1,2,3}和{2,1,3}的id一样,甚至{4,1,3}的id都一样?!是怎么回事?

{1,2,3}is{2,1,3}返回的False,且第二次print id的时候发生了变化,这是为什么呢?


https://img1.sycdn.imooc.com//szimg/5a7595a20001d29416270095.jpg

我专门查了id()的文档,但也没弄明白。

虽然可能在实际编程中没多大用途,可还是很好奇啊。


然后我还发现了一点,就是打印列表的id的时候,同样会出现id相同的情况,而元组的id则不同。

那么这种情况是跟可变对象和不可变对象有关系?id()返回的到底是什么呀?

https://img1.sycdn.imooc.com//szimg/5a759cb60001e91109531047.jpg

0 回复 有任何疑惑可以回复我~
  • 啊,我好像想通了。是原地可变吧? id返回的是内存地址,实际上集合的地址没变而内容是变了的,所以is返回False。列表也是。
    老师,是这样吧?
    回复 有任何疑惑可以回复我~ 2018-02-03 19:53:43
7七月 2018-01-23 18:14:11

https://img1.sycdn.imooc.com//szimg/5a670aea00019f6a04450221.jpg这里这里。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕容1078073 #1
    难道是系统的问题?我是mac系统。。怎么换顺序,内存地址都是相同的
    回复 有任何疑惑可以回复我~ 2018-01-23 18:27:34
  • 7七月 回复 提问者 慕容1078073 #2
    试了好几次都是不同的。
    回复 有任何疑惑可以回复我~ 2018-01-23 19:31:53
7七月 2018-01-15 22:40:26

你要看下is是比较什么。is是判断A是否是B,很明显A不是B,是两个不同的对象。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕容1078073 #1
    可是用id函数查看的两个集合的内存地址是相同的啊?
    回复 有任何疑惑可以回复我~ 2018-01-23 17:42:17
  • 7七月 回复 提问者 慕容1078073 #2
    相同的难道is就一定要是相等吗。。。 is不是判断内存地址的啊。
    回复 有任何疑惑可以回复我~ 2018-01-23 18:07:10
  • 7七月 回复 提问者 慕容1078073 #3
    不不不,说错了。我都被搞晕了。
    回复 有任何疑惑可以回复我~ 2018-01-23 18:13:45
Invistada 2018-01-14 23:26:39

 {1,2,3} is {2,1,3} 此时两个集合内存地址不一样

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信