删除 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,因此它们不会消失。
我知道当 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,因此它们不会消失。