为什么当我通过运算符(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
。