Pythonがどのようにメモリとガベージコレクトを割り当てるのか、そしてそれがどのようにプラットフォーム固有であるのか、私は少し戸惑っています。たとえば、次の2つのコードスニペットを比較すると、次のようになります。
スニペットA:
>>> id('x' * 10000000) == id('x' * 10000000)
True
スニペットB:
>>> x = "x"*10000000
>>> y = "x"*10000000
>>> id(x) == id(y)
False
スニペットAはtrueを返します。これは、Pythonがメモリを割り当てるときに、最初のテストでは同じ場所に割り当て、2番目のテストでは異なる場所に割り当てるため、メモリの場所が異なるためです。
しかし、これを大規模に試してみると、システムのパフォーマンスやプラットフォームがこれに影響を与えるようです。
for i in xrange(1, 1000000000):
if id('x' * i) != id('x' * i):
print i
break
Macの友達がこれを試し、最後まで実行しました。たくさんのLinuxVMで実行すると、常に異なるVMで(ただし異なる時間に)返されます。これは、Pythonでのガベージコレクションのスケジュールが原因ですか?Linux VMの処理速度がMacよりも遅いためですか、それともLinux Pythonの実装でガベージコレクションが異なるためですか?