【问题标题】:Python del not deleting [duplicate]Python del不删除[重复]
【发布时间】:2020-03-05 01:41:06
【问题描述】:
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)

结果:

2
[<A object: 2>, <A object: 1>]

预期结果:

2
[<A object: 2>]

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

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

【问题讨论】:

    标签: python python-3.x del


    【解决方案1】:

    问题在于del 并没有像您认为的那样做。我的猜测是您认为它会导致 del 之后的名称引用的值被删除。真正发生的是,以del 命名的引用已从当前命名空间中删除。
    如果该引用是对该值的最后一次引用,那么最终(可能立即,但可能不会持续非常长时间),被引用的值将被删除。
    您的del other 只删除了名为other 的引用,没有可检测到的效果。它不会(也不能)更改传入sum 的列表内容。

    【讨论】:

      猜你喜欢
      • 2019-04-18
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      相关资源
      最近更新 更多