标签: tracemalloc

Python这里不重用内存吗?Tracemalloc 的输出是什么意思?

我创建了一个包含一百万个对象的列表int,然后用其负值替换每个对象。tracemalloc报告 28 MB 额外内存(每个新int对象 28 字节)。为什么?intPython 不会为新对象重用垃圾收集对象的内存吗?或者我误解了tracemalloc结果?为什么会提到这些数字,它们的真正含义是什么?

\n
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())\n
Run Code Online (Sandbox Code Playgroud)\n

输出(在线尝试!):

\n
(27999860, 27999972)\n
Run Code Online (Sandbox Code Playgroud)\n

如果我替换xs[i] = -xx = -x(因此新对象而不是原始对象被垃圾收集),则输出仅仅是(56, 196)尝试一下)。我保留/丢失这两个物品中的哪一个有什么区别?

\n

如果我循环两次,它仍然只报告(27992860, 27999972)尝试一下)。为什么不是 56MB?第二次运行与第一次运行有何不同?

\n

python memory cpython python-internals tracemalloc

6
推荐指数
1
解决办法
786
查看次数

标签 统计

cpython ×1

memory ×1

python ×1

python-internals ×1

tracemalloc ×1