python - python 中集合的元素必须是可变的还是不可变的?

标签 python set

我正在阅读 python 中的集合 http://www.python-course.eu/sets_frozensets.php并且对 python 中集合的元素必须是可变的还是不可变的感到困惑?因为在定义部分他们说“集合包含唯一且不可变对象(immutable对象)的无序集合”。如果它是真的,那么集合如何包含列表,因为列表是可变的?

有人可以澄清我的疑问吗?

>>> x = [x for x in range(0,10,2)]
>>> x
[0, 2, 4, 6, 8]      #This is a list x
>>> my_set = set(x)  #Here we are passing list x to create a set
>>> my_set
set([0, 8, 2, 4, 6])   #and here my_set is a set which contain the list.
>>> 

最佳答案

当您通过 set()构造函数内置任何 iterable,它从 iterable 中提供的元素构建一个集合。因此,当您向 set() 传递一个列表时,它会创建一个包含列表中对象的集合——而不是一个包含列表本身的集合,这是不允许的,因为列表是可变的。

所以重要的是列表中的对象是不可变的,这在链接教程的情况下是正确的,因为您有一个(不可变的)字符串列表。

>>> set(["Perl", "Python", "Java"])
set[('Java', 'Python', 'Perl')]

请注意,此打印格式并不意味着您的集合包含一个列表,这只是集合在打印时的表示方式。例如,我们可以从一个元组创建一个集合,它将以相同的方式打印出来。

>>> set((1,2,3))
set([1, 2, 3])

在 Python 2 中,集合打印为 set([comma-separated-elements])

关于python - python 中集合的元素必须是可变的还是不可变的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37772232/

相关文章:

python - 无法将数据推送到 Azure 事件中心

python - 尝试调用 Lifx API 并在一种情况下收到错误,但在另一种情况下则没有

python - Scrapy Spider 关闭后如何获取 `item_scraped_count` - Python27

java - Java 中是否有有向无环图 (DAG) 数据类型,我应该使用它吗?

java - 删除 Java 列表中的重复字符串

Java Collections - 查找两个集合之间是否存在公共(public)元素的最快方法

delphi - 集合的乘法运算符是否有记录?

python - 如何展平内存 View ?

python - 为什么下面的算法是 O(1) 空间?

Powershell,内置的集合交叉点?