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
'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.
Nasıl python yorumlayıcısı yapmak doğr...
Nasıl Kaldır/Python ile boş olmayan bi...
Nasıl okunur bir metin Python string b...
Nasıl&; while (i == i) quot ;" te...
Nasıl ASCII olmayan karakterler bir di...