sys.getsizeof(list(range(10))) # 200
sys.getsizeof([0,1,2,3,4,5,6,7,8,9]) # 144
sys.getsizeof([i for i in range(10)]) # 192
Run Code Online (Sandbox Code Playgroud)
我几乎没有C方面的经验,所以这可能使我感到头疼,但是我在玩耍时很好奇sys.getsizeof。
我试图看一下文档,但是我发现只有这样:
如果对象由垃圾收集器管理,则getsizeof()调用对象的sizeof方法并添加额外的垃圾收集器开销。
由于我的C经验很少,所以我对GC也不太熟悉,但是从与Python有关的GC阅读中,我了解到Python中仅计数引用。在上述情况下,我们没有将其保存到变量中,所以我假设没有GC引用吗?
似乎在使用list()和range()函数时python会分配一些额外的内存。如果使用将生成的数组中的值复制到新数组中[:],则可以看到它们相等。
例:
import sys
sys.getsizeof(list(range(10))[:]) # 144
sys.getsizeof([0,1,2,3,4,5,6,7,8,9][:]) # 144
sys.getsizeof([i for i in range(10)][:]) # 144
Run Code Online (Sandbox Code Playgroud)