Python'da Değiştirilebilir ve Değiştirilemez

Python'da Değiştirilebilir ve Değiştirilemez

Bu makalede Python'da değiştirilebilir ve değiştirilemez kavramları açıklanmaktadır.

YouTube Video

Python'da Değiştirilebilir ve Değiştirilemez

"Değiştirilebilir" ve "değiştirilemez," bir nesnenin değiştirilebilirliği anlamına gelir. Bunu anlamak, beklenmeyen hataları önlemeye ve verimli bellek yönetimine yardımcı olur.

Değiştirilebilir Nedir?

Değiştirilebilir nesneler, oluşturulduktan sonra iç durumları değiştirilebilir.

Ana Değiştirilebilir Veri Türleri

  • list
  • dict
  • set
  • Kullanıcı tanımlı sınıflar (eğer özellikleri değiştirilebiliyorsa)

Örnek: Bir Listenin Değiştirilmesi

1numbers = [1, 2, 3]
2numbers[0] = 100
3print(numbers)  # [100, 2, 3]

Bir liste, değiştirilebilir bir nesnedir ve elemanları serbestçe değiştirilebilir.

Değiştirilemez Nedir?

Değiştirilemez nesneler, oluşturulduktan sonra değiştirilemez. Bu nesneleri değiştirmeye çalışmak, yeni bir nesne oluşturulmasıyla sonuçlanır.

Ana Değiştirilemez Veri Türleri

  • int
  • float
  • str
  • tuple
  • bool
  • frozenset

Örnek: Bir Stringin Değiştirilmesi

1text = "hello"
2# text[0] = "H"  # TypeError: 'str' object does not support item assignment
3
4text = "H" + text[1:]  # Creates a new string
5print(text)  # "Hello"

Stringler değiştirilemezdir, dolayısıyla onları kısmen değiştiremezsiniz.

Değiştirilebilir ve Değiştirilemez Karşılaştırması

 1# Mutable example
 2a = [1, 2, 3]
 3b = a
 4b[0] = 100
 5print(a)  # [100, 2, 3] -> a is also changed
 6
 7# Immutable example
 8x = 10
 9y = x
10y = 20
11print(x)  # 10 -> x is unchanged

Yukarıdaki örnekte gösterildiği gibi, değiştirilebilir nesneler referans yoluyla paylaşılır, bu nedenle diğer değişkenleri etkileyebilirler. Öte yandan, değiştirilemez nesneler yeniden atama sırasında yeni örnekler oluşturur, bu da orijinal değeri etkilemeden bırakır.

id() Kullanarak Dahili Davranışı İnceleme

Python'da bir nesnenin kimliğini kontrol etmek için id() fonksiyonunu kullanabilirsiniz. Nesne kimliği, bir bellek adresine benzer.

 1# Immutable int behavior
 2a = 10
 3print(id(a))  # e.g., 140715920176592
 4a += 1
 5print(id(a))  # e.g., 140715920176624 -> ID has changed
 6
 7# Mutable list behavior
 8b = [1, 2, 3]
 9print(id(b))  # e.g., 2819127951552
10b.append(4)
11print(id(b))  # Same ID -> only the content has changed

Görüldüğü gibi, değişmez türler için yeni bir nesne oluşturulur, ancak değiştirilebilir türler yerinde değiştirilir.

Fonksiyonlar ve Değiştirilebilir/Değiştirilemez Nesnelerle Dikkat

Bir fonksiyona değiştirilebilir bir nesne geçirildiğinde, orijinal veri değiştirilebilir.

Örnek: Bir Listeyi Değiştiren Fonksiyon

1def modify_list(lst):
2    lst.append(100)
3
4my_list = [1, 2, 3]
5modify_list(my_list)
6print(my_list)  # [1, 2, 3, 100]

Örnek: Bir Sayıyı Değiştiren Fonksiyon

Öte yandan, bir değiştirilemez nesneyi değiştirme girişimi yeni bir nesne oluşturur.

1def modify_number(n):
2    n += 10
3
4my_number = 5
5modify_number(my_number)
6print(my_number)  # 5 -> unchanged

Pratik Hususlar

Değiştirilebilir Nesneleri Varsayılan Argümanlar Olarak Kullanmayın

 1# Bad example
 2def add_item(item, container=[]):
 3    container.append(item)
 4    return container
 5
 6print(add_item(1))  # [1]
 7print(add_item(2))  # [1, 2] -> unintended behavior
 8
 9# Good example
10def add_item(item, container=None):
11    if container is None:
12        container = []
13    container.append(item)
14    return container

Varsayılan argümanlar yalnızca fonksiyon tanımında bir kez değerlendirildiğinden, değiştirilebilir nesnelerin kullanımı beklenmeyen yan etkilere neden olabilir.

Özet

Python'un değişkenlerini ve veri türlerini derinlemesine anlamak için, değiştirilebilir ve değiştirilemez arasındaki farkları kavramak önemlidir. Bu özellikleri anlamak, kodunuzda istenmeyen davranışlardan kaçınmanıza ve daha sağlam ve okunabilir programlar yazmanıza yardımcı olur.

Yukarıdaki makaleyi, YouTube kanalımızda Visual Studio Code'u kullanarak takip edebilirsiniz. Lütfen YouTube kanalını da kontrol edin.

YouTube Video