Bellek yönetiminin Bytearray ile Python'da liste arasında nasıl bir fark olduğunu bilmek isterim.Python'da Bytearray ve List Arasındaki Fark
Difference between bytearray and list gibi bir kaç soru buldum ama tam olarak soruma cevap vermiyor.
Sorum tam ...
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
biz liste/array.array arasındaki boyutlarda bir fark (4 element için 36 bayt) ve bir bayt dizisi (4 element için 32 bayt olduğunu görebileceğiniz gibi). Birisi bana bunun neden olduğunu açıklayabilir mi? 4
öğeleri (4 * 8 == 32)
için 32
bayt bellek kapladığı bayt dizisi için anlamlıdır, ancak bu liste ve array.array için nasıl yorumlanabilir? Her bir eleman sadece 8
bayt işgal ettiğinde, iki bitişik eleman arasında fark yok neden
# 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
, burada 16
birimleri tarafından farklıdır. Bu, her bir bellek adresi işaretçisinin bir nibble işaret ettiği anlamına mı geliyor?
Ayrıca bir tamsayı için bellek ayırma ölçütleri nedir? Python'un daha fazla bellek, tam sayı değerine bağlı olarak daha fazla bellek atayacağını okudum (yanlışsam beni düzelt).
Örn:
>>> y = 10
>>> y.__sizeof__()
14
>>> y = 1000000
>>> y.__sizeof__()
16
>>> y = 10000000000000
>>> y.__sizeof__()
18
Python bellek ayırır kriter nedir?
Python neden bu kadar fazla bellek kaplıyorken C
yalnızca 8 bayt kaplıyor (benimki 64 bitlik bir makinedir)? Tam olarak (2 ** 64)
tamsayı aralığında olduğunda?
Meta veriler:
Python sürümü:'3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)]'
Makine kemer: 64 bit
PS: Nazikçe iyi yazıya bana yol Python bellek yönetimi nerede daha iyi açıkladı. Bu şeyleri anlamak için neredeyse bir saat harcadım ve bu soruyu SO'ya sorarak bitirdim. :(
İyi soru, yukarı dönük. Hey, şanslısın: my Linux Xubuntu 64 bit makine CPython 3.4.3 üzerinde 'y .__ sizeof __()' ', y = 1M'' aynı, y = 10' 'için 28 '' bana verir 32' 'y = 10000000000000' için – Pynchia
Merhaba @Pynchia, Benim makinem 64 bit olmasına rağmen, Mine bir 32 bit python. Emin değilim, ama sebebi bu olabilir. Birinin netleşmesini bekleyelim. –