我的问题似乎很古怪和模棱两可,请检查以下代码:
def foo():
for _ in range(4):
x = []
print(id(x))
some_handler(x)
在控制台上,您将看到例如:
4319661960
4319191112
4319661960
4319191112
众所周知,id()
提供了一个不透明值作为对象的标识符。在上面的代码片段中,我确实期望有四个不同的值,因此实际上我将x初始化为一个空列表,因此稍后将在some_handler()函数中对其进行处理。现在我不能,因为x会保留循环中先前运行的历史值。
我很多时候陷入了一个明显而愚蠢的陷阱。我在这里错了吗?
答案 0 :(得分:1)
在循环结束时,如果没有其他对x
的引用,则可以立即对对象进行垃圾回收。这意味着该地址可以在下次创建对象时重新使用。
保存x
的值(例如,将其放入另一个列表中),然后查看ID是唯一的。