gpt4 book ai didi

Python对象删除

转载 作者:太空狗 更新时间:2023-10-30 01:44:59 24 4
gpt4 key购买 nike

a = [1,2,3,4,5]
b = a[1]
print id(a[1],b) # out put shows same id.hence both represent same object.
del a[1] # deleting a[1],both a[1],b have same id,hence both are aliases
print a # output: [1,3,4,5]
print b # output: 2

两个 b,a[1] 都有相同的 id 但删除一个不会影响另一个。Python 引用指出 订阅上的'del' 删除实际对象,而不是名称对象绑定(bind) .输出:[1,3,4,5] 证明了这个说法。但是当 a[0]b 具有相同的值时,'b' 怎么可能不受影响编号。

编辑:订阅上的 'del' 部分删除实际对象,而不是名称对象绑定(bind) 不正确。反之亦然。 “del”实际上删除了名称、对象绑定(bind)。如果订阅时使用“del”(例如 del a[1]),则会从列表对象中删除对象 2,同时也会删除当前的 a[1] 绑定(bind)到 2 并使 a[1] 绑定(bind)到 3。后续索引遵循该模式。

最佳答案

del 不会删除对象,它会删除引用

有一个对象是整数值2。一个对象被两个地方引用; a[1]b

您删除了 a[1],因此该引用已消失。但这对 object 2 没有影响,仅对 a[1] 中的引用有影响。因此,通过名称 b 访问的引用仍然可以很好地到达对象 2

即使您del 所有引用,对对象 也没有影响。 Python 是一种垃圾收集语言,因此它负责注意到何时根本不再在任何地方引用一个对象,以便它可以回收该对象占用的内存。这将在对象不再可访问后的某个时间发生。1


1 CPython 使用引用计数来实现它的垃圾收集2,这让我们可以说对象通常会在其最后一个引用死亡后立即被回收,但那是不属于语言规范的实现细节。您不必确切了解 Python 是如何收集垃圾的,也不应该编写依赖于它的程序;其他 Python 实现(例如 Jython、PyPy 和 IronPython)不会以这种方式实现垃圾收集。

2 加上一个额外的垃圾收集机制来检测引用计数无法处理的循环垃圾。

关于Python对象删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12913362/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com