我有点困惑 Python 如何分配内存和垃圾收集,以及它是如何特定于平台的。例如,当我们比较以下两个代码片段时:
片段一:
>>> id('x' * 10000000) == id('x' * 10000000)
True
片段 B:
>>> x = "x"*10000000
>>> y = "x"*10000000
>>> id(x) == id(y)
False
Snippet A 返回 true 是因为当 Python 分配内存时,它在第一次测试中将其分配在相同的位置,而在第二次测试中分配在不同的位置,这就是它们的内存位置不同的原因。
但显然系统性能或平台会影响这一点,因为当我大规模尝试时:
for i in xrange(1, 1000000000):
if id('x' * i) != id('x' * i):
print i
break
Mac 上的一个朋友试过这个,它一直运行到最后。当我在一堆 Linux 虚拟机上运行它时,它总是会在不同的虚拟机上返回(但在不同的时间)。这是因为 Python 中的垃圾收集调度吗?是因为我的 Linux VM 的处理速度低于 Mac,还是因为 Linux Python 实现的垃圾收集方式不同?