删除 Python 对象引用(引用计数)

Deleting Python object reference (reference counting)

我知道当 Python 处理对象时,它使用 'reference' 对象,而不是实际值本身。

但是下面代码的行为对我来说似乎很奇怪。
5 个虚拟对象引用从 prev 复制到 now 列表,然后 prev 被清除。

那么,存储在now中的引用不应该也被作废吗?

class dummy:
    pass

prev = [dummy() for _ in range(5)] 

now = []
for d in prev:
    now.append(d)

for idx in range(5):
    print(prev[idx] is now[idx]) # all True - so, same reference copied

prev.clear()
print(prev) # empty
print(now) # 5 'dummy' objects survived - How??

我发现这个问题可能重复,想问一下这是否是 now 中的引用在 prev.clear()
之后没有失效的原因

也许我太习惯引用 C++ 中的概念,Python 不一样。

通过将 prev 中的每个对象添加到 now,您将它们的引用计数增加 1,因此它们变为 2。

删除prev中的对象时,每个对象的引用计数减1,变为1。

由于对象的引用计数未达到 0,因此它们不会消失。