我无法将整数添加1到现有集合中。在交互式 shell 中,我这样做:
1
>>> st = {'a', True, 'Vanilla'} >>> st {'a', True, 'Vanilla'} >>> st.add(1) >>> st {'a', True, 'Vanilla'} # Here's the problem; there's no 1, but anything else works >>> st.add(2) >>> st {'a', True, 'Vanilla', 2}
这个问题是两个月前发布的,但我认为它被误解了。我正在使用 Python 3.2.3。
这里的问题在于集合如何处理相等性和唯一性。在 Python 中,True相当于1(因为True == 1计算结果为True)。当你1向已经包含 的集合中添加 时True,Python 会将其视为1已存在于集合中,因为True和1在此上下文中被视为相等。
True
True == 1
以下是具体发生的步骤:
{ 'a', True, 'Vanilla' }
此行为仅适用于True和1,和False和0,因为它们与Python 中的bool和等效int。
False
0
bool
int
为了确认这一点,您可以检查:
>>> True == 1 # Returns True True >>> False == 0 # Returns True True
简而言之,这不是一个错误,而是 Python 中的故意设计。类型bool是的子类int,并且True和在数字上下文中False被视为1和0,包括集合成员资格检查。