python中的列表赋值行为

时间:2012-11-12 21:47:24

标签: python list sorting variable-assignment

来自其他语言,我对列表中Python变量赋值的方式有点困惑。举个例子,让我们说:

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

如果打印x和y,则两个变量的结果相同:

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

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

另一方面,如果我使用切片运算符将列表x的内容分配给列表y,那么我将达到预期的(至少在我的情况下)行为:

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

如果打印x和y,我会看到列表x保持不变。

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

有人可以解释背后的逻辑吗?

谢谢!

1 个答案:

答案 0 :(得分:6)

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