我可以做到这一点:
这让我感觉生成器b仍然指向列表a。因此,我想知道生成器是如何构建的。或者第一种情况中x被删除了的原因。
>>> x = [2,3,4]
>>> y = (v * 2 for v in x)
>>> del x # x is deleted
>>> print(list(y)) # y still exists
[4, 6, 8]
这可能让我认为生成器y与列表x无关。但我也可以这样做:
>>> a = [2, 3, 4]
>>> b = (v * 2 for v in a)
>>> a.append(5) # change a
>>> print(list(b)) # b is also changed
[4, 6, 8, 10]
这让我感觉生成器b仍然指向列表a。因此,我想知道生成器是如何构建的。或者第一种情况中x被删除了的原因。
del x
并不一定会删除被x
引用的对象,它只是删除了 *名称x
*。因此,生成器仍然引用着a
。 - juanpa.arrivillagax
被删除之后,生成器仍然保留对该对象的引用。 - inspectorG4dget