微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么将堆的一部分传递给heapq.heapify时不更改列表?

如何解决为什么将堆的一部分传递给heapq.heapify时不更改列表?

根据上一个answer

切片列表不会生成列表中对象的副本;它 只需复制引用即可。

但是,当我运行以下命令时:

from heapq import heapify
import random as r

def heapfiddling(a):
    heapify(a[1:])
    return a

r.seed(42)
a = [r.randrange(1,100) for i in range(10)]
print("a",a)
print("s",sorted(a))
print("h",heapfiddling(a))

我明白了

a [82,15,4,95,36,32,29,18,14]
s [4,14,82,95]
h [82,14]

最后的打印输出不会更改基础列表a。但是,将切片从a[1:]更改为a(将其传递到heapify的切片)时,最后的打印输出会更改:

h [4,36]

为什么?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。