下面的代码应该删除每个nHuman 对象,然后打印最后一行,但它只删除了其中的 4 个,在执行停止后第 5 个被删除(我认为)。
class Human():
def __init__(self, name):
self.name = name
def __del__(self):
print(f'{self.name} is dead')
n = 5
humans = []
for i in range(n):
human = Human('Bob')
humans.append(human)
for i in reversed(range(n)):
del humans[i]
print('DEATH')
Run Code Online (Sandbox Code Playgroud)
输出如下(Powershell 和 Python 3.8.1):
Bob is dead
Bob is dead
Bob is dead
Bob is dead
DEATH
Bob is dead
Run Code Online (Sandbox Code Playgroud)
在第二个 for 循环humans为空之后,因此不可能通过 删除最后一个项目del humans[0]。删除列表内容 (del humans[:]或humans.clear) 的其他方法也不能解决问题,输出保持不变。
那么,这是代码的行为方式还是存在一些问题?