能否在函数内部删除作为参数传入的实例对象
能否在propagate方法内部删除传入的ray1对象
首先给出明确结论:无法在propagate函数内部直接删除外部作用域的ray1对象本身,以下以Python(你给出的代码示例为Python语法)场景具体说明:
- 你将
ray1作为参数传入refractor.propagate()时,实际传递的是ray1对象的引用,函数内部接收到的只是这个引用的本地副本,和外部作用域定义的ray1变量是两个独立的标识,只是指向同一个内存中的对象 - 如果你在
propagate内部执行del操作删除对应的入参变量,只是删掉了函数内部的这个引用副本,对外部的ray1变量没有任何影响,也不会导致内存中的对象被销毁 - 只有当外部所有指向该对象的引用都被清除(比如外部主动执行
del ray1,且没有其他变量/容器引用这个对象),这个对象才会被Python的垃圾回收机制回收
如果你的需求是执行propagate后让原ray1对象不可用,可以换替代实现方案:给ray1所属的类新增一个valid标记属性,在propagate内部把入参对象的valid属性设为False,后续外部使用ray1前先判断该属性即可。
内容的提问来源于stack exchange,提问作者Deag
相关产品推荐
相关产品推荐

