python中的列表赋值行为

Posted

技术标签:

【中文标题】python中的列表赋值行为【英文标题】:list assignment behavior in python 【发布时间】:2012-11-01 08:56:09 【问题描述】:

来自其他语言,我对列表中 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]

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

谢谢!

【问题讨论】:

@MartijnPieters 哎呀,我已经修好了。谢谢。 Python references 的可能重复项 【参考方案1】:

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

【讨论】:

以上是关于python中的列表赋值行为的主要内容,如果未能解决你的问题,请参考以下文章

python中的“引用”和C++的引用

python中列表中的方法(重点) 列表的基本操作(赋值删除和分片赋值)

列表理解中的Python奇怪行为[重复]

Python列表赋值

Python中的列表

Python从菜鸟到高手(11):列表的基础操作