ssd*_*ssd 4 python garbage-collection generator
我可以做这个:
>>> 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]
Run Code Online (Sandbox Code Playgroud)
这可能让我认为生成器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]
Run Code Online (Sandbox Code Playgroud)
这让我觉得生成器b仍然指向列表a.所以我想知道如何实际构建发电机.或者也许在第一种情况下有关于如何删除x的内容.
del
不删除对象.它删除了名字.只要有对象,对象仍然存在.名称x
和生成器y
都引用单个对象(列表).如果del x
删除了名称x
,但生成器仍保留其引用.如果修改x
,生成器会看到它,因为它指的是同一个对象.