首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python del不删除

Python del不删除
EN

Stack Overflow用户
提问于 2020-03-05 09:41:07
回答 1查看 325关注 0票数 0
代码语言:javascript
复制
class A:
    def __init__(self):
        self.quantity = 1

    def __add__(self, other):
        self.quantity += other.quantity
        del other  # Not deleting.
        return self

    def __radd__(self, other):
        if other == 0:
            return self
        else:
            return self.__add__(other)

    def __str__(self):
        return f'{self.quantity}'

    def __repr__(self):
        return f'<A object: {self.quantity}>'


if __name__ == '__main__':
    a = A()
    b = A()
    array = [a,b]
    print(sum(array))
    print(array)

结果:

代码语言:javascript
复制
2
[<A object: 2>, <A object: 1>]

预期结果:

代码语言:javascript
复制
2
[<A object: 2>]

该函数正在正常添加,但del没有删除列表中的其他项。

在使用del other之后,我尝试使用other,但它打印了一个错误。但它不会从列表中删除该项目。

EN

回答 1

Stack Overflow用户

发布于 2020-03-05 10:09:49

问题是del并没有像你想象的那样工作。我的猜测是,您认为这会导致在del之后的名称引用的值被删除。实际发生的情况是,以del命名的引用从当前名称空间中删除。

如果该引用是对该值的最后引用,则最终(可能立即,但可能不会很长时间),被引用的值将被删除。

您的del other仅删除名为other的引用,没有可检测到的效果。它不会(也不能)更改传递给sum的列表的内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60537084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档