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.