python - 为什么在 Python 中将集合传递给 set.discard 时不会抛出错误?

标签 python python-3.x list set

我的问题很简单。

当我运行时

someSet = {1,2,3,4}
someSet.discard([5])

它给出了错误:

Traceback (most recent call last):
  File "File.py", line 2, in <module>
    someSet.discard([5])
TypeError: unhashable type: 'list'

就像列表一样,集合也是不可散列的并且不能存储在集合中。 因此,我预计以下代码会生成错误:

someSet = {1,2,3,4}
someSet.discard({5})

但令我惊讶的是,它没有产生任何错误。为什么会这样呢?这是否意味着我收到列表错误,因为除了不可散列之外还有其他原因导致了错误?如果是的话,那是什么东西?

最佳答案

有一个weird special case如果您将另一个集合传递给 set.removeset.discardx in set,则该集合会默默地转换为卡住集合。

Note, the elem argument to the __contains__(), remove(), and discard() methods may be a set. To support searching for an equivalent frozenset, a temporary one is created from elem.

关于python - 为什么在 Python 中将集合传递给 set.discard 时不会抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75105035/

相关文章:

python - 如何计算列表中大于给定数字的元素的出现次数?

python - GCC 与 python 解释器有什么关系?

C# List<string> 添加索引以列出控制台输出

python - 我应该如何为球队、球员和比赛对象设计 django 模型?

python - 简单(但具体)的监听器和发送器 Python 3 DBus 示例

python - 你如何在 python3 程序中使用 python2 模块

python - 如何为 subprocess.call 创建自定义输出流

Python:创建一个新列表,其中包含已排序的嵌套列表中的所有元素

python - 仅当其值不属于特定数据类型时才连接 3+ 列

Python virtualenv 日期与操作系统不同