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

时间:2018-12-20 23:46:02

标签: python list tuples

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

没什么...我是从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

我希望两个都是假的:(

1 个答案:

答案 0 :(得分:0)

Python可以通过"interning"优化小型只读对象(字符串,数字,元组)(保留常见的小型对象的列表),或者注意到它们在编译时是相同的,并且不会花费很多时间复制。

由于无法更改这些对象,因此这是一种安全的优化方法,并且可能导致is对于原本会分开的两个对象返回True。

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

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