在Python中对列表的副本进行排序出错[重复]

9wbgstp7  于 2023-05-02  发布在  Python
关注(0)|答案(1)|浏览(120)

此问题已在此处有答案

How do I clone a list so that it doesn't change unexpectedly after assignment?(24回答)
8天前关闭
我试图复制一个列表来对副本进行排序,但由于某种原因,它也对原始列表进行了排序。下面是代码部分。我使用调试器来弄清楚排序函数之后发生了什么。

p = [7,1,5,3,6,4]
copy = p

现在根据调试器,(copy = [7,1,5,3,6,4])然后我做

copy.sort(reverse = True)

但是现在copy和p = [7,6,5,4,3,1]我通过copy = p找到了解决方案。copy().但我不明白为什么原始列表也改变了。

8ehkhllq

8ehkhllq1#

如果你希望第二个变量是另一个列表的唯一副本,你可以调用它的copy方法。
例如:

>>> a=[3,2,1]
>>> b=a.copy()
>>> a.sort()
>>> a
[1, 2, 3]
>>> b
[3, 2, 1]

否则,如果只执行b = a,那么b只是对a的引用,两者都指向同一个对象。
顺便说一句,当列表不一定在原地时,对列表进行排序的惯用方法是使用sorted,i。e.

>>> a=[3,2,1]
# this:
>>> b=a.copy()
>>> b.sort()
# ..is equivalent to:
>>> b=sorted(a)

.sort()是有用的,当你想避免创建一个你需要排序的列表的副本时,因为你只会在原始列表的项目按顺序排列后才处理它。

相关问题