Python “为什么?”==&引用;即使元组和列表包含相同的值,比较结果仍返回False?

Python “为什么?”==&引用;即使元组和列表包含相同的值,比较结果仍返回False?,python,python-3.x,list,tuples,operators,Python,Python 3.x,List,Tuples,Operators,我尝试了以下代码: T = ('a','b','c') L = list(T) print(T == L) #Output: False 我运行PythonTutor进行可视化,得到: 现在我很清楚为什么T是L返回False。但是由于T,L包含每个元素完全相同的值,我不明白为什么=比较返回False('a','b','c')=['a','b','c']返回False,因为列表和元组之间的比较总是返回False,而不管它们的内容如何。该文件记录在: 序列(元组、列表或范围的实

我尝试了以下代码:

T = ('a','b','c')
L = list(T)

print(T == L)         #Output: False
我运行PythonTutor进行可视化,得到:

现在我很清楚为什么
T是L
返回
False
。但是由于
T,L
包含每个元素完全相同的值,我不明白为什么
=
比较返回
False
('a','b','c')=['a','b','c']
返回False,因为列表和元组之间的比较总是返回False,而不管它们的内容如何。该文件记录在:

序列(元组、列表或范围的实例)只能在每种类型内进行比较,但范围不支持顺序比较在这些类型之间进行相等比较会导致不相等,而在这些类型之间进行排序比较会引发TypeError



是否
“3”==3
正确?应该是吗?如果你真的想比较这两者并确保每个iterable的每个值都是真的,那么你应该实现你自己的比较器:
all(t==l代表t,l在zip(t,l)中)
我认为这是一个足够公平的问题,因为在Python中,例如
3==3.0
,我们都知道Javascript是什么样的。在这一天结束的时候,答案就是,它是这样的——容器类型的实例通常不被认为是等同于不同类型的实例。(你总是可以将list和tuple子类化,并覆盖
\uuuueq\uuuuu
)我绝对不认为这是一个不合理的问题,我只是以一个基本的形式提出:)这回答了你的问题吗?