我认为下面的所有内容都会评估为 False。有人能解释一下发生了什么事吗?不可变构造函数不会创建新对象(和新 id)吗?元组如何具有相同的 id 却是不同的对象?
print((1,) is (1,))
print(id(1,) == id(1,))
print('a' is 'a')
print(id('a') == id('a'))
结果:
False
True
True
True
最佳答案
您的第二行不正确。您正在将 1
传递给 id
。 (Python 允许在参数列表中使用尾随逗号。)
print((1,) is (1,))
print(id((1,)) == id((1,)))
print('a' is 'a')
print(id('a') == id('a'))
哪些是
False
False
True
True
因此 id
和 is
的结果匹配。
应该注意的是,is
/id
的结果可能因实现而异。
例如,在 CPython 2.7 中,2 * 2 是 4
,但 2 * 200 不是 400
。对于低整数值,CPython 使用相同的内存地址(这是 CPython 中 id 的结果)。同样,这因实现而异。
关于Python 不可变类型 ids 和 is 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32513781/