rec*_*gle 12 python comparison tuples
为什么是() is ()真的,但却(0,) is (0,)是假的?
我以为他们会是同一个对象.但是,我显然错过了一些东西.
Est*_*ber 12
is测试以查看语句的两端是否共享相同的内存地址.它基本上是一个简写id(a) == id(b)
>>> print id(()), id(())
30085168 30085168
>>> print id((0,)), id((0,))
38560624 38676432
>>>
Run Code Online (Sandbox Code Playgroud)
正如()经常发生的那样,它实际上被Python解释器视为单例(就像0到255之间的整数,空字符串,空列表等).当与解释器进行比较时(0, ),(0, )它们实际上是内存中的不同变量.如果它们是可变的,你可以修改第一个,第二个不会改变,因此它们不是相同的(a is not b).