为什么python列表会这样做?

为什么python列表会这样做?,python,list,Python,List,我想用python复制一个列表,同时删除一个元素: x = [1,2,3] a = list(x).remove(2) 虽然x仍然是[1,2,3],但a是None,而不是我预期的[1,3] 如果我将第2行分为两行,则会得到预期的行为: x = [1,2,3] a = list(x) a.remove(2) a现在是[1,3],x未修改 这是为什么?.remove()方法修改列表本身,但不返回修改后的列表。例如: x = [1, 2, 3] x.remove(2) print x 结果: [

我想用python复制一个列表,同时删除一个元素:

x = [1,2,3]
a = list(x).remove(2)
虽然
x
仍然是
[1,2,3]
,但
a
None
,而不是我预期的
[1,3]

如果我将第2行分为两行,则会得到预期的行为:

x = [1,2,3]
a = list(x)
a.remove(2)
a
现在是
[1,3]
,x未修改

这是为什么?

.remove()
方法修改列表本身,但不返回修改后的列表。例如:

x = [1, 2, 3]
x.remove(2)
print x
结果:

[1, 3]
通常,请就地修改列表。有些方法(如
.sort()
sorted
)的内置函数返回修改过的列表,但
的内置函数没有。remove()
.remove()
方法修改列表本身,但不返回修改过的列表。例如:

x = [1, 2, 3]
x.remove(2)
print x
结果:

[1, 3]

通常,请就地修改列表。有些方法(如
sorted
.sort()
)的内置函数返回修改后的列表,但
没有。remove()

如果确实需要复制列表,有几个选项,但我更喜欢:

x = [1, 2, 3]
y = x[:]
x.remove(2)
print x, y
这张照片是:

[1, 3] [1, 2, 3]

如果您确实需要复制列表,有几个选项,但我更喜欢:

x = [1, 2, 3]
y = x[:]
x.remove(2)
print x, y
这张照片是:

[1, 3] [1, 2, 3]

通常,
x=obj.method1().method2()
将在
obj
上调用
method1
,并在
obj.method1()的返回值上调用
method2
。而
method2
的返回值将是分配给变量
x
@poke Yeah的值,该变量在常规
x=obj.method1()。method2()
将调用
obj
上的
method1
obj.method1()的返回值上的
method2
method2
的返回值将是分配给变量
x
@poke-Yeah的值,这很有意义为什么您更喜欢这样?这里有一个链接,指向如何克隆列表的问题。在上面的答案中列出的所有选项中,我觉得y=x[:]切片是最简单的(虽然不一定是直观的复制)。你为什么喜欢这样做?这里有一个链接,指向一个问题,询问如何克隆列表。在上面的答案中列出的所有选项中,我觉得切片,y=x[:],是最简单的(虽然不一定是直观的,你会制作一个副本)。