最近,我对python的内存管理感到困惑。首先是关于 dict,假设我有一个复合 dict 对象,例如
d = {id1: {'x': 'a', 'y': [1,2,3], 'z': {'k', 'v'}}, id2: {...}}
如果我打电话给德尔,
del d[id1]
d[id1]['y'] 和 d[id1]['z'] 会一起回收吗?
其次是关于列表,我从这里阅读了答案,所以我尝试了一下。这是我的代码
import sys
import gc
import time
from collections import defaultdict
from pprint import pprint
def f():
d = defaultdict(int)
objects = gc.get_objects()
for o in objects:
d[type(o)] += 1
x = d.items()
x = sorted(x, key=lambda i: i[1], reverse=True)
pprint(x[:5])
def loop():
while True:
leaked = [[x] for x in range(100)]
f()
time.sleep(0.1)
当范围为 100 时,函数 f 确实向我显示列表在增加,但是当我将范围修改为 1000 时,没有任何改变,列表的数量保持不变。任何人都可以告诉我有什么问题吗?