python中的列表分配行为

list assignment behavior in python

由于来自其他语言,我对列表中的python变量分配方式有点困惑。例如,假设:

1
2
3
x = [4, 5, 2, 70, 1]
y = x
y.sort()

如果打印X和Y,两个变量的结果相同:

1
2
x = [1, 2, 4, 5, 70]
y = [1, 2, 4, 5, 70]

我没料到会有这种行为。我认为x的顺序不会改变,因为我只在列表y上应用了排序方法。

另一方面,如果我使用切片操作符将列表X的内容分配给列表Y,那么我将实现预期的(至少在我的情况下)行为:

1
2
3
x = [4, 5, 2, 70, 1]
y = x[:]
y.sort()

如果打印了X和Y,我会看到列表X保持不变。

1
2
x = [4, 5, 2, 70, 1]
y = [1, 2, 4, 5, 70]

有人能解释一下背后的逻辑吗?

谢谢您!


切片生成副本,而分配将两个标签都指向同一列表实例。排序y对列表实例进行排序,列表实例与x指向的实例相同。或者,您可以使用y = sorted(x)获得您想要的结果。