3

来自其他语言,我对列表中 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 应用了排序方法。

另一方面,如果我使用切片运算符将列表 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]

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

谢谢!

4

1 回答 1

6

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

于 2012-11-12T21:49:13.580 回答