身份运算符疑问

来源:5-12 如何判断变量的值、身份与类型

慕容1078073

2018-01-14

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

这个是什么原因呢?

写回答

4回答

Invistada

2018-02-03

老师,我彻底懵了。

//img.mukewang.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的时候发生了变化,这是为什么呢?


//img.mukewang.com/szimg/5a7595a20001d29416270095.jpg

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

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


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

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

//img.mukewang.com/szimg/5a759cb60001e91109531047.jpg

0
1
Invistada
啊,我好像想通了。是原地可变吧? id返回的是内存地址,实际上集合的地址没变而内容是变了的,所以is返回False。列表也是。 老师,是这样吧?
2018-02-03
共1条回复

7七月

2018-01-23

//img.mukewang.com/szimg/5a670aea00019f6a04450221.jpg这里这里。

0
2
7七月
回复
慕容1078073
试了好几次都是不同的。
2018-01-23
共2条回复

7七月

2018-01-15

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

0
4
7七月
回复
慕容1078073
你看下我贴的图。
2018-01-23
共4条回复

Invistada

2018-01-14

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

0
0

Python3.8系统入门+进阶 (程序员必备第二语言)

语法精讲/配套练习+思考题/原生爬虫实战

14447 学习 · 4438 问题

查看课程