Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果设置不正确';不允许可变对象那么为什么它允许列表呢?_Python_Python 2.7_Python 3.x_Set - Fatal编程技术网

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

我正在学习python,我学习了一个教程,该教程不允许可变对象,所以我认为可变对象是列表

当我尝试这个的时候

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个列表,这是不允许的。