Python 如果设置不正确';不允许可变对象那么为什么它允许列表呢?
我正在学习python,我学习了一个教程,该教程不允许可变对象,所以我认为可变对象是列表 当我尝试这个的时候Python 如果设置不正确';不允许可变对象那么为什么它允许列表呢?,python,python-2.7,python-3.x,set,Python,Python 2.7,Python 3.x,Set,我正在学习python,我学习了一个教程,该教程不允许可变对象,所以我认为可变对象是列表 当我尝试这个的时候 x = set(["Perl", "Python", "Java"]) citiess = set((["Python","Perl"], ["Paris", "Berlin", "London"])) 很好用 当我试着 cities = set((("Python","Perl"), ("Paris", "Berlin", "London"))) 它也起作用,但当我尝试这个 x
x = set(["Perl", "Python", "Java"])
citiess = set((["Python","Perl"], ["Paris", "Berlin", "London"]))
很好用
当我试着
cities = set((("Python","Perl"), ("Paris", "Berlin", "London")))
它也起作用,但当我尝试这个
x = set(["Perl", "Python", "Java"])
citiess = set((["Python","Perl"], ["Paris", "Berlin", "London"]))
这是错误吗?所以为什么它会给出错误,如果它是一个列表,那么为什么第一个代码会运行,而它也有一个列表
请不要重定向问题,它与“如何构造一组列表项”不同。集合不允许可变元素*,但在集合([“Perl”、“Python”、“Java”])
中,列表不是元素。列表的元素用作新集合的元素,并且列表的元素是不可变的
*具体来说,以影响比较的方式可变的元素。这不是重复列表不能是集合元素;这将失败:
set().add([1,2,3])
@User123999由于与set([“Perl”、“Python”、“Java”])
的实际操作混淆,因此它是重复的。。它是从项目列表中构造一个集合。也许如果您将set([“Perl”、“Python”、“Java”])
改为{“Perl”、“Python”、“Java”}
和set([“Python”、“Perl”],[“Paris”、“Berlin”、“London”])
改为{([“Python”、“Perl”],[“Paris”、“Berlin”、“London”])
,那么第一种方法有效,而第二种方法无效的原因就很清楚了。请注意,{…}
是集合文字符号。很抱歉,我在python中真的不是noebie,请您花点时间解释一下,这将非常有帮助,“列表不是元素。列表的元素用作新集合的元素,列表的元素是不可变的。”在第一个示例中,创建一组三个字符串。set()
构造函数根据作为参数传递的内容创建一个集合。它迭代该列表并将其中的内容添加到集合中。在第二个示例中,您正在处理元组,元组是合法的集合元素。但是,在第三个列表中,您将得到一组2个列表,这是不允许的。