SORU
3 AĞUSTOS 2011, ÇARŞAMBA


Nasıl Python olmayan atanmış bir string bellekte bir adres olabilir mi?

Birisi bana bunu açıklayabilir mi? Kimliği ile oynuyorum yani() python komut ve bu genelinde geldi

>>> id('cat')
5181152
>>> a = 'cat'
>>> b = 'cat'
>>> id(a)
5181152
>>> id(b)
5181152

Bu kısım hariç benim için bir anlam ifade eder: string 'kedi' bir değişken için ben atamadan önce bellekte bir adresi vardır. Ben muhtemelen sadece bellek adresleme nasıl çalıştığını ama biri bana bunu açıklayabilir ya da en azından bellek adresleme okumak gerektiğini söyler anlamıyorum?

Hepsi iyi hoş ama bu beni daha da karıştı:

>>> a = a[0:2] 't'
>>> a
'cat'
>>> id(a)
39964224
>>> id('cat')
5181152

Bu garip çünkü bana vurdu< . '' . cat ^güçlü 5181152 ama yeni bir adres ile bir dizebirfarklı bir adresi vardır. Eğer iki olmazsa olmaz< . '' . cat ^güçlü neden hafıza dizeleri iki adres için basılı değil('') kat . numarası ? Benim son düşüncem bu birleştirme çalıştım adres değişikliği ile ilgili bir şey vardı:

>>> id(b[0:2] 't')
39921024
>>> b = b[0:2] 't'
>>> b
'cat'
>>> id(b)
40000896

Kimlikleri aynı olmasını tahmin ederdim ama bu durum böyle değildi. Düşünceler?

CEVAP
3 AĞUSTOS 2011, ÇARŞAMBA


'cat' id() geçmek için oluşturmak için bir adresi vardır. Henüz bir isim için size bağlı değil, ama nesne hala var.

Pythonönbelleğe ve yeniden kısa dizeleri. Ama eğer birleştirme ile dizeleri hazırladıktan sonra önbellek ve girişimleri tekrar kullanmak arar kod atlanır.

Dize önbelleği iç işleyişini uygulama ayrıntı saf ve değerlendirilmemelidir unutmayın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • andony5589

    andony5589

    7 Aralık 2011
  • guau . .

    guau . .

    25 Ocak 2008
  • Vagrant Records

    Vagrant Reco

    8 Mayıs 2006