Referans tiplerin çalışma mantığı nedir?

595914

Centipat
Katılım
4 Kasım 2022
Mesajlar
80
2 kodda da sonuç farklı çıkıyor. Aynı çıktıyı vermesi gerekmiyor mu? Mantığını anlatabilecek var mı? Ya da en azından neden sonucun farklı çıktığını söylese yeter.

1. Kod

listeA = ['muz', 'armut']
listeB = ['elma', 'çikolata']
listeC = ['kivi', 'çilek']

listeA = listeB = listeC

print(listeA, listeB, listeC)

Çıktı => ['kivi', 'çilek'] ['kivi', 'çilek'] ['kivi', 'çilek']

2. Kod

listeA = ['muz', 'armut']
listeB = ['elma', 'çikolata']
listeC = ['kivi', 'çilek']

listeA = listeB
listeB = listeC

print(listeA, listeB, listeC)

Çıktı => ['elma', 'çikolata'] ['kivi', 'çilek'] ['kivi', 'çilek']

Bunları da çalışma mantığı şeklinde çizdim.
Heap1 yazan ilk kod. Heap2 yazan diğer resim.

Sormak istediğim 2. kodun çıktısı da hepsinin ['kivi', 'çilek'] olması gerekmiyor mu ?
 

Dosya Ekleri

  • heap1.png
    heap1.png
    91,5 KB · Görüntüleme: 22
  • heap2.png
    heap2.png
    97,1 KB · Görüntüleme: 20
Son düzenleyen: Moderatör:
2 kodda da sonuç farklı çıkıyor. Aynı çıktıyı vermesi gerekmiyor mu? Mantığını anlatabilecek var mı? Ya da en azından neden sonucun farklı çıktığını söylese yeter.

1. Kod

listeA = ['muz', 'armut']
listeB = ['elma', 'çikolata']
listeC = ['kivi', 'çilek']

listeA = listeB = listeC

print(listeA, listeB, listeC)

Çıktı => ['kivi', 'çilek'] ['kivi', 'çilek'] ['kivi', 'çilek']

2. Kod

listeA = ['muz', 'armut']
listeB = ['elma', 'çikolata']
listeC = ['kivi', 'çilek']

listeA = listeB
listeB = listeC

print(listeA, listeB, listeC)

Çıktı => ['elma', 'çikolata'] ['kivi', 'çilek'] ['kivi', 'çilek']

Bunları da çalışma mantığı şeklinde çizdim.
Heap1 yazan ilk kod. Heap2 yazan diğer resim.

Sormak istediğim 2. kodun çıktısı da hepsinin ['kivi', 'çilek'] olması gerekmiyor mu ?
İlk çıktıda hepsi birbirine eşit.2. çıktıda B'yi A'ya ve C'yi B'ye atıyosun. Yani ilki farklı diğer ikisi aynı oluyor.
 
Son düzenleme:
Mantık şu makine sen söyleyene kadar liste a yı liste C ye eşitlemiyor. Yani tanımladığın gibi listeA listeB ye eşit olmuş oluyor ondan elma çikolata yazdırıyor
 
ListeA = listeB = listeC böyle bir tanım yanlış bence onun yerine listeA= listeC, ListeB = listeC yazmak daha sağlıklı olduğunu düşünüyorum
 
Referans tipler bellekte aynı yeri tutarlar. Kopyalanarak değil, birbirinin referansını alarak oluşurlar. O yüzden referans tiplerindeki değişiklik birbirini etkiler. Değer tipleri ise kopyalanarak oluşurlar ve bellekte farklı yerleri tutarlar o yüzden yapılan değişiklikler birbirini etkilemez.
 

Yeni konular

Geri
Yukarı