为什么当我通过运算符比较两个相等的元组时,得到的结果与比较两个相等的列表时得到的结果不同吗? (一个为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
我希望两个都是假的:(
答案 0 :(得分:0)
Python可以通过"interning"优化小型只读对象(字符串,数字,元组)(保留常见的小型对象的列表),或者注意到它们在编译时是相同的,并且不会花费很多时间复制。
由于无法更改这些对象,因此这是一种安全的优化方法,并且可能导致is
对于原本会分开的两个对象返回True。
实际细节是特定于版本的,并且可能因版本而异。它们当然等于(==
),但是可以相同(is
)。
可以修改列表(它们是mutable
),因此,在当前语言规则下,必须将它们视为不同的对象。它们具有单独的标识,并且is
不同。否则更改c
将会更改d
。