BytearrayとPythonのリストのメモリ管理がどのように異なるのか不思議です。BytearrayとPythonのリストの違い
私はDifference between bytearray and listのようないくつかの質問を見つけましたが、正確には私の質問に答えていません。
私の質問に正確...
from array import array
>>> x = array("B", (1,2,3,4))
>>> x.__sizeof__()
36
>>> y = bytearray((1,2,3,4))
>>> y.__sizeof__()
32
>>> z = [1,2,3,4]
>>> z.__sizeof__()
36
たちは、リスト/ array.array(4つの要素のための36バイト)とバイト配列とのサイズの違いがある見ることができるように(4つの要素のための32のバイト)。誰かがなぜ私にこのことを説明することができますか?バイト配列は、4
要素(4 * 8 == 32)
のメモリのうち、32
バイトを占有していますが、これはlistとarray.arrayのためにどう解釈できますか?
# Lets take the case of bytearray (which makes more sense to me at least :p)
for i in y:
print(i, ": ", id(i))
1 : 499962320
2 : 499962336 #diff is 16 units
3 : 499962352 #diff is 16 units
4 : 499962368 #diff is 16 units
各要素のみ8
バイトを占有する場合、なぜ2つの隣接する要素間の差は、ここで16
単位だけ異なるん。これは、各メモリアドレスポインタがニブルを指していることを意味しますか?
また、整数のメモリ割り当ての基準は何ですか?私はPythonが整数の値に基づいてより多くのメモリを割り当てることを読んでいます(私が間違っていれば私を修正します)。
例:Pythonはメモリを割り当てる基準が何であるかを
>>> y = 10
>>> y.__sizeof__()
14
>>> y = 1000000
>>> y.__sizeof__()
16
>>> y = 10000000000000
>>> y.__sizeof__()
18
?
C
は8バイトしか占めません(私のものは64ビットマシンです)。それらが完全に整数の範囲の下にあるとき(2 ** 64)
?
メタデータ:
Pythonのバージョン:'3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)]'
マシンアーチ: 64ビット
PS:親切にPythonのメモリ管理がある良い記事に私を導きます説明が良い。私はこれらのことを理解するのに約1時間を費やしていたので、この質問をSOでお願いしました。 :(
良い質問、upvoted。私のLinux Xubuntu 64ビットマシンでCPython 3.4.3 '' y = 1M'、 '32'の' '.__ sizeof __()' 'は' 'y = 'y = 10000000000000'の場合 – Pynchia
こんにちは@Pynchia、私のマシンは64ビットですが、Mineは32ビットのPythonです。私は確信していませんが、それが理由かもしれません。明確にするのを待つことができます。 –