运算符 (is) 如何处理元组和列表



为什么当我通过运算符(is)比较两个相等的元组时,我得到的结果与比较两个相等的列表时的结果不同?(一个是真的,另一个是假的)

真的没什么...我从Python开始,我不想把我的疑虑留在:)

a=(1,2,3)
b=(1,2,3)
c=[1,2,3]
d=[1,2,3]
print(a is b) #True
print(c is d) #false

我以为两者都是假:(

Python 可以通过"暂留"它们(保留常见小对象列表)来优化小型只读对象(字符串、数字、元组),或者在编译时注意到它们是相同的并且不制作第二个副本。

由于这些对象无法更改,因此这是一种安全的优化,并且可能导致is为两个本来是独立的对象返回 True。

实际细节是特定于版本的,可能会因版本而异。 它们当然是相等的(==),但可能是相同的,也可能是不相同的(is)。

列表可以修改(它们是mutable),因此,在当前的语言规则下,它们必须被视为不同的对象。 它们具有单独的标识,is不同。 否则,更改c会更改d

最新更新