Python 为什么修改list()返回的内容不起作用?

Python 为什么修改list()返回的内容不起作用?,python,list,Python,List,假设我有一个包含三个字符串的列表,我想要一个删除其中一个字符串的新列表。我知道有其他方法可以做到这一点,但我感到惊讶的是,以下方法不起作用: x = ['A','B','C'] y = list(x).remove('A') 为什么上述方法不起作用 编辑:谢谢大家的回答 Per(增加强调): 某些操作(例如y.append(10)和y.sort())会改变对象,而表面上类似的操作(例如y=y+[10]和sorted(y))会创建一个新对象一般来说,在Python中(以及在标准库中的所有情况下

假设我有一个包含三个字符串的列表,我想要一个删除其中一个字符串的新列表。我知道有其他方法可以做到这一点,但我感到惊讶的是,以下方法不起作用:

x = ['A','B','C']

y = list(x).remove('A')
为什么上述方法不起作用

编辑:谢谢大家的回答

Per(增加强调):

某些操作(例如
y.append(10)
y.sort()
)会改变对象,而表面上类似的操作(例如
y=y+[10]
sorted(y)
)会创建一个新对象一般来说,在Python中(以及在标准库中的所有情况下),对对象进行变异的方法将返回
None
,以帮助避免混淆这两种类型的操作。
因此,如果您错误地编写了
y.sort()
,认为它会给您一个
y
的排序副本,相反,您将得到
None
,这可能会导致您的程序生成一个易于诊断的错误

由于
remove
是一种变异方法(更改
列表
它被就地调用),因此它遵循返回
None
的一般模式。如果没有,那么一行如下:

y = x.remove('A')
这似乎是可行的,但它会将
y
化名为
x
引用的同一
列表
,根本不会创建新的
列表
,并且可能需要一些时间才能注意到该错误,即使您使用
x
y
相信它们是独立的。通过返回
None
,任何试图使用
y
并认为它是一个单独的
list
(或者根本就是一个
list
)的尝试都可能会失败(在您的情况下,无论是否使用
list
包装,都会使您对
remove
的滥用变得明显)

这通常也鼓励Python的(松散的)指导方针避免将流程中的太多步骤推到一行上。如果要复制
列表
并删除一个元素,可分两步执行:

y = list(x)
y.remove('A')

它工作得很好。

我想这取决于你认为它“工作”的意思。
x.remove('A')
应该工作<代码>列表(x)。删除('A')创建一个新列表,并从新创建的列表中删除
A
。因此,即使在删除元素后打印
x
A
仍将存在。
list.remove()
返回
None
。它被记录为这样做,这是故意的。