SORU
18 Mart 2012, Pazar


Neden dizilerini değişken öğeleri içerebilir?

Bir demet halinde değişmez neden değişken öğeleri içerebilir o zaman?

Görünüşte değişken bir öğe listesi gibi modifiye olsun, demet tutar değişmez varlığa ait olduğu bir çelişkidir.

CEVAP
18 Mart 2012, Pazar


Çok güzel bir soru bu.

Anahtar fikir dizilerini içlerinde nesneler değiştirilebilir olup olmadığını bilmenin bir yolu var. Nesne bir değişken kılan tek şey, verileri değiştiren bir yöntem var. Genel olarak, bu algılamak için bir yolu yoktur.

Başka bir fikir Python'un kaplar aslında hiçbir şey içermez. Bunun yerine, diğer nesnelere başvurular devam ediyorlar. Aynı şekilde, Python değişkenleri derlenen dillerde değişkenler gibi değildir; bunun yerine değişken adları sadece karşılık gelen bir nesne ile ilişkili olduğu ad, sözlük anahtarları. Ned Batchhelder güzel bu blog post onun açıklar. Her iki şekilde de, nesneleri sadece başvuru sayısı; bu başvuruları ne olduğunu bilmiyorlar (değişkenler, konteyner veya Python iç).

Birlikte, bu iki anlayış gizemini açıklamak değişmez bir demet "" alttaki liste değiştiğinde bir listesini değiştirme gibi) içeren. neden ( Aslında, kayıt düzeni değişmedi (bunu önceden sahip olduğu diğer nesneler için aynı başvurular var). Demet değiştiremedi mutasyona yöntemleri yoktu çünkü). Liste değişmiş, kayıt düzeni değiştirmek (liste bir değişken, bir dizi, ya da başka bir liste tarafından kabul olup olmadığını bilmiyor) haberdar olmadı.

Konu açılmışken, burada nasıl çalışır dizilerini ne zihinsel modelini tamamlamak yardımcı olacak başka düşünceler, ve amaçlanan kullanımı vardır:

  1. Dizilerini onların değişmezliğini tanıdı ve hedeflenen amaçlar doğrultusunda daha az ile karakterizedir.
    Dizilerini tek bir çatı altında bilgi heterojen adet toplama Python yoludur. Örneğin, s = ('www.python.org', 80) burada bir araya getiren bir dize ve host/port çifti bir yuva olarak çevresinde bir sayı yani, bileşik bir nesne. Bu ışık altında bakıldığında, değişken bileşenleri için gayet makul.

  2. Değişmezliğini tanıdı başka bir özelliği ile-el-ele gider, hashability. Ama hashability mutlak bir özellik değildir. Eğer başlığın bileşenlerinden biri hashable değil eğer doğru değilse, o zaman genel başlık hashable değil. Örneğin, t = ('red', [10, 20, 30]) değil hashable.

Son örnek 2-demet, bir dize ve bir liste içerir gösterir. (Yani içeriğini değiştirmek için herhangi bir yöntem yok) değişken kendisi değil demet. Aynı şekilde, dize herhangi bir mutasyona yöntem yok çünkü değişmez. Liste nesnesi mutasyona yöntemleri var mı, değiştirilebilir. Bu mutability bazı nesneler mutasyona yöntemleri var ve bazı yoktur, bir nesne türünün bir özelliği olduğunu gösterir. Bu nesneleri iç içe diye değiştirmez.

İki şeyi unutma. İlk olarak, değişmezliğini tanıdı ... büyü sadece mutasyona yöntemleri yokluğudur. İkinci olarak, nesne değişkenleri veya kapları onlara sadece ... bakın ne olduğunu bilmiyorum başvuru sayısı.

Bu sizin için yararlı olduğunu umuyoruz :-)

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Absolute Zero(Programming Tutorials)

    Absolute Zer

    22 Kasım 2012
  • NewsyTech

    NewsyTech

    2 AĞUSTOS 2010
  • UCBerkeley

    UCBerkeley

    3 Mayıs 2006