python - 如果删除包含另一个对象的对象会发生什么?
问题描述
如果我有
class MyClass:
def __init__(self, object):
self.object = object
some_other_object = SomeOtherObject()
myclass = MyClass(some_other_object)
del myclass
发生了some_other_object
什么?也会被删吗?
解决方案
some_other_object
如果整个程序中没有其他引用,那么是的,它也将被删除。
在您的情况下,有两个参考: 1)some_other_object
和 2) myclass.object
。
删除myclass
只是删除第二个引用。但第一个仍然存在。
Python 使用一种称为“引用计数”的垃圾收集方法。简而言之,Python 会跟踪内存中每个对象的“引用”数量。如果您运行del x
,您将减少对x
由 1 引用的对象的引用数(当然,该名称x
不再引用该对象)。一旦一个对象的引用数达到0,就可以对它进行垃圾回收(即可以释放它占用的内存)。
推荐阅读
- python - Anaconda-Spyder-mac 版本的快捷方式
- php - PrestaShop 1.7 在自己的模块中覆盖 src 文件
- swift - 当某些用户名有奇怪的符号时,如何解析 api?
- namespaces - 我可以使用 Apache Drill 查询命名空间中的 hbase 表吗?
- html - 如何为这个 HTML 编写 XPath 和 CSS?
- c# - nHibernate:使用原始查询创建数据库
- php - 如何在插入数据库之前验证数据是否满足特定条件
- javascript - 如何将 0 添加到我的分钟和秒?
- amazon-web-services - 无法从我的 ubuntu EC2 机器连接到 AWS DocumentDB
- javascript - 不懂用函数和参数解析查询字符串