Ek Çalışma — Aliasing ve Kopyalama

Aliasing ve kopyalama çalışma seti

Bu set 9. bölümdeki en kritik ayrımı tekrar ettirir: iki ad aynı mutable nesneyi gösterebilir. Her soruda önce nesneleri ve adları kâğıda çizmeniz önerilir.

A — Çıktı ne olur? (8 soru)

A1

a = [1, 2]
b = a
b.append(3)
print(a)

A2

a = [1, 2]
b = a.copy()
b.append(3)
print(a)
print(b)

A3

a = [10, 20]
b = a
b[1] = 99
print(a[1])

A4

a = [[1], [2]]
b = a.copy()
b[0].append(9)
print(a)

A5

a = [1, 2, 3]
b = a
c = b
c.pop()
print(a)
print(a is c)

A6

a = [4, 5]
b = a[:]
b[0] = 40
print(a)
print(b)

A7

a = [3, 1, 2]
b = a
b.sort()
print(a)

A8

a = [3, 1, 2]
b = sorted(a)
print(a)
print(b)

A1: [1, 2, 3]
A2: [1, 2] ve [1, 2, 3]
A3: 99
A4: [[1, 9], [2]]; dış liste kopyalandı, iç listeler paylaşılıyor.
A5: [1, 2] ve True
A6: [4, 5] ve [40, 5]
A7: [1, 2, 3]; .sort() aynı listeyi yerinde değiştirir.
A8: [3, 1, 2] ve [1, 2, 3]; sorted() yeni liste üretir.

B — Hangi adlar aynı nesneyi gösteriyor? (4 soru)

Her soruda aynı nesneye bağlı ad gruplarını yazın.

B1

a = [1]
b = a
c = a.copy()

B2

x = [1, 2]
y = x
z = y
k = x[:]

B3

a = [[1], [2]]
b = a.copy()

Dış listeler ve iç listeler için ayrı cevap verin.

B4

ilk = [5]
ikinci = ilk
ilk = [9]

Son satırdan sonra ilk ve ikinci neyi gösterir?

B1: a ve b aynı liste; c ayrı dış liste.
B2: x, y, z aynı liste; k ayrı liste.
B3: a ve b farklı dış listeler; fakat a[0] is b[0] ve a[1] is b[1] doğrudur.
B4: yeniden atama ilk adını yeni [9] listesine bağlar; ikinci eski [5] listesini göstermeye devam eder.

C — Fonksiyon çağrısı dışarıdaki listeyi değiştirir mi? (3 soru)

C1

def ekle(veri):
    veri.append(10)

sayilar = [1, 2]
ekle(sayilar)
print(sayilar)

C2

def ekle(veri):
    veri = veri + [10]
    return veri

sayilar = [1, 2]
sonuc = ekle(sayilar)
print(sayilar)
print(sonuc)

C3

def ilk_satiri_degistir(tablo):
    kopya = tablo.copy()
    kopya[0].append(99)
    return kopya

tablo = [[1], [2]]
yeni = ilk_satiri_degistir(tablo)
print(tablo)
print(yeni)

C1: dışarıdaki sayilar değişir ve [1, 2, 10] olur; append aynı mutable listeyi değiştirir.
C2: sayilar [1, 2] kalır; sonuc [1, 2, 10] olur. veri + [10] yeni liste üretir ve yerel adı ona bağlar.
C3: hem tablo hem yeni [[1, 99], [2]] görünür. Dış liste kopyalansa da ilk iç liste paylaşılmaktadır.

Kapanış kontrolü

Bir atama gördüğünüzde otomatik olarak “kopyalandı” demeyin. Şu soruyu sorun:

Bu satır yeni bir nesne mi üretiyor, yoksa yalnızca yeni bir adı var olan nesneye mi bağlıyor?

Back to top