存储元组的集合的行为,Python

存储元组的集合的行为,Python,python,set,tuples,Python,Set,Tuples,我想创建一组元组,但遇到了一些我不理解的行为。例如: >>> b=set() >>> b.add((1,2)) >>> b.add((4,5)) >>> b {(1, 2), (4, 5)} # all fine >>> f = set((1,2,3)) >>> f {1, 2, 3} # ? >

我想创建一组元组,但遇到了一些我不理解的行为。例如:

    >>> b=set()
    >>> b.add((1,2))
    >>> b.add((4,5))
    >>> b
    {(1, 2), (4, 5)}
    # all fine
    >>> f = set((1,2,3))
    >>> f
    {1, 2, 3}
    # ?
    >>> b=set().add((1,2))
    >>> b
    # b is empty?
有人能帮我理解这种行为吗?我的理解是元组是可散列的,所以我应该能够将它们存储在一个集合中。我正在使用Python 3。

集合((1,2,3))
表示一组
(1,2,3)
的元素。唯一元素为
(1,2,3)
的集合是
{(1,2,3)}
,而不是
集合((1,2,3))

set.add
在适当的位置修改集合。如果要添加到集合中,则需要存储集合本身,然后向集合中添加,而不是存储集合的返回值。

set((1,2,3))
表示一组
(1,2,3)
元素。唯一元素为
(1,2,3)
的集合是
{(1,2,3)}
,而不是
集合((1,2,3))


set.add
在适当的位置修改集合。如果要添加到集合中,则需要存储集合本身,然后向集合中添加,而不是存储集合的返回值。

您混淆了不同的东西

  • set()
    获取一个iterable并从内容中创建一个集合

    如果要创建具有单个元组的集合,请传入具有该单个元组的iterable:

    >>> set([(1, 2, 3)])
    {(1, 2, 3)}
    
    最好使用
    {…}
    设置文字语法:

    >>> {(1, 2, 3)}
    {(1, 2, 3)}
    
  • set().add()
    更新就地设置并返回
    None

    如果要创建一个空集并将其添加到其中,请使用两个单独的表达式:

    >>> b = set()
    >>> b.add((1, 2))
    >>> b
    {(1, 2)}
    

这两个问题都与元组是可散列的无关。

您混淆了不同的东西

  • set()
    获取一个iterable并从内容中创建一个集合

    如果要创建具有单个元组的集合,请传入具有该单个元组的iterable:

    >>> set([(1, 2, 3)])
    {(1, 2, 3)}
    
    最好使用
    {…}
    设置文字语法:

    >>> {(1, 2, 3)}
    {(1, 2, 3)}
    
  • set().add()
    更新就地设置并返回
    None

    如果要创建一个空集并将其添加到其中,请使用两个单独的表达式:

    >>> b = set()
    >>> b.add((1, 2))
    >>> b
    {(1, 2)}
    
这两个问题都与元组可散列无关。

set().add()
返回
None
set().add()
返回
None