我创建了一个包含一百万个对象的列表int,然后用其负值替换每个对象。tracemalloc报告 28 MB 额外内存(每个新int对象 28 字节)。为什么?intPython 不会为新对象重用垃圾收集对象的内存吗?或者我误解了tracemalloc结果?为什么会提到这些数字,它们的真正含义是什么?
import tracemalloc\n\nxs = list(range(10**6))\ntracemalloc.start()\nfor i, x in enumerate(xs):\n xs[i] = -x\nprint(tracemalloc.get_traced_memory())\nRun Code Online (Sandbox Code Playgroud)\n输出(在线尝试!):
\n(27999860, 27999972)\nRun Code Online (Sandbox Code Playgroud)\n如果我替换xs[i] = -x为x = -x(因此新对象而不是原始对象被垃圾收集),则输出仅仅是(56, 196)(尝试一下)。我保留/丢失这两个物品中的哪一个有什么区别?
如果我循环两次,它仍然只报告(27992860, 27999972)(尝试一下)。为什么不是 56MB?第二次运行与第一次运行有何不同?