我正在阅读 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/