python中的集合元素必须是可变的还是不可变的?
我在阅读python中的集合时,弄不清楚python中集合的元素必须是可变的还是不可变的?因为在定义部分,他们说“一个集合包含一个无序的、唯一的、不可变的对象的集合。”如果这是真的,那么一个集合如何包含列表,因为列表是可变的 有人能澄清我的疑问吗python中的集合元素必须是可变的还是不可变的?,python,set,Python,Set,我在阅读python中的集合时,弄不清楚python中集合的元素必须是可变的还是不可变的?因为在定义部分,他们说“一个集合包含一个无序的、唯一的、不可变的对象的集合。”如果这是真的,那么一个集合如何包含列表,因为列表是可变的 有人能澄清我的疑问吗 >>> x = [x for x in range(0,10,2)] >>> x [0, 2, 4, 6, 8] #This is a list x >>> my_set = set(x)
>>> 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.
>>>
当您传递任何iterable中内置的构造函数时,它将构建iterable中提供的元素集。因此,当您传递set()
列表时,它会创建一个包含列表中对象的集合,而不是包含列表本身的集合,这是不允许的,因为列表是可变的
因此,重要的是列表中的对象是不可变的,这在链接教程中是正确的,因为您有一个(不可变)字符串列表
>>> set(["Perl", "Python", "Java"])
set[('Java', 'Python', 'Perl')]
请注意,这种打印格式并不意味着您的集合包含列表,它只是在打印时集合的表示方式。例如,我们可以从一个元组创建一个集合,并以相同的方式打印它
>>> set((1,2,3))
set([1, 2, 3])
在Python 2中,集合被打印为
集合([
逗号分隔的元素
])
您似乎把初始化集合与列表混淆了:
a = set([1, 2])
将列表添加到现有集合时:
a = set()
a.add([1, 2])
后者将抛出一个错误,前者使用作为参数提供的列表中的值初始化集合。造成混淆的最可能原因是,当您打印第一个示例中的a
时,它看起来像:
set([1, 2])
同样,这里的[1,2]
不是一个列表,只是a
的表示方式:
a = set()
a.add(1)
a.add(2)
print(a)
给出:
set([1, 2])
没有指定列表。集合不能包含列表。从该教程本身来看:“集合是以一种不允许可变对象的方式实现的。下面的示例演示了我们不能将示例列表作为元素包含”您只是被集合的打印方式(与
set([
,后跟元素,后跟])
搞混了。请参见我的答案如何获得相同的结果“列表”没有详细说明。谢谢老兄澄清我的疑问。