Python中复制列表后排序,原列表却被修改的问题
为什么原列表会跟着被修改?
这是因为Python里的列表属于可变对象,你写的copy = p根本不是复制列表,只是给同一个列表对象多起了个名字——copy和p指向的是内存里同一个列表,就像两个遥控器控制同一台电视。
看你的代码流程:
- 执行
p = [7,1,5,3,6,4],内存中生成一个列表对象,p是指向它的"指针"。 - 执行
copy = p,只是让copy也指向这个列表,并没有生成新的列表。 - 调用
copy.sort(reverse=True)时,本质是对这个共享的列表对象做排序操作,所以p和copy都会显示排序后的结果。
怎么正确复制列表?
你用的p.copy()是正确的方式之一,它会创建一个全新的列表对象,把原列表的元素复制进去,此时copy和p各指各的列表,操作其中一个不会影响另一个。
另外还有两种常用的复制方式:
- 切片操作:
copy = p[:],切片默认取整个列表,会返回新列表。 - 如果列表里嵌套了其他可变对象(比如列表里套列表),要用深拷贝:
import copy copy = copy.deepcopy(p)
内容的提问来源于stack exchange,提问作者Keval Modi
相关产品推荐
相关产品推荐

