验证方面用编辑器比较合适, 交互模式下可能不是真正的结果
- # 对象被 s1 和 s2 引用
- s1 = Temp()
- s2 = s1
- del s1 # 只删除 s1, 新创建的对象并没有被删除
- print("-" * 10)
输出:(最后的被干掉是程序退出了)
- # ----------
- # 你被干掉了
如果用链接来解释就是这样的:
这次两个都删掉:
- t1 = Temp()
- t2 = t1
- del t1
- del t2
- print("-" * 10)
输出:
- # 你被干掉了
- # ----------
都删了, 自然就真删掉了
这样搞比较麻烦, 我们引入一下获取引用个数: getrefcount(object 也会占 1 个引用计数) 来个案例:
- # 程序退出的时候, 在他运行期间所有占用资源归还操作系统
- # 引用计数
- import sys
- t1 = Temp()
- print(sys.getrefcount(t1)) #(结果比实际引用大 1)[object 也会占 1 个引用计数]
- t2 = t1
- print(sys.getrefcount(t1))
- print(sys.getrefcount(t2))
- del t1
- print(sys.getrefcount(t2))
- # sys.getrefcount(t1)# 被删掉自然没有了
- del t2
- print("-" * 10)
运行结果:
2
3
3
2
你被干掉了
----------
我再贴一种情况, 你可以思考下为啥:
- t1 = Temp()
- t2 = Temp()
- del t1
- del t2
- print("-" * 10)
输出:
- # 你被干掉了
- # 你被干掉了
- # ----------
来源: https://www.cnblogs.com/dotnetcrazy/p/9202988.html