Python'da Liste Nasıl Kopyalanır (Sığ ve Derin Kopya)
Python'da bir listenin nasıl kopyalanacağını öğrenin. Liste dilimlemeyi, copy() yöntemini, liste oluşturucularını keşfedin ve sığ ve derin kopyalar arasındaki farkta uzmanlaşın.
Genel Bakış
Python'da listeler değiştirilebilir nesnelerdir ve değişkenler gerçek değerlerden ziyade bellekte bu nesnelere yönelik referansları tutar. Bu, yeni bir değişkene (örneğin, 'list_b = liste_a') bir liste atarsanız, her iki değişkenin de tam olarak aynı listeye referans verdiği anlamına gelir. 'list_b' aracılığıyla yapılan herhangi bir değişiklik, 'list_a'yı hemen etkileyecektir. Bu yan etkiyi önlemek için listenin açık bir kopyasını oluşturmalısınız.
Python bir listenin yüzeysel bir kopyasını oluşturmak için çeşitli yollar sunar. Sığ bir kopya, orijinal listede bulunan öğelere referanslar içeren yeni bir liste oluşturur. Yaygın yöntemler arasında yerleşik liste `.copy()` yönteminin kullanılması, liste dilimleme `list_a[:]` kullanılması veya listenin `list()` yapıcısına aktarılması yer alır. Bunların tümü, öğeleri bağımsız olarak eklemenize veya kaldırmanıza olanak tanıyan yeni bir liste kapsayıcısı oluşturur.
Bununla birlikte, bir liste iç içe geçmiş değiştirilebilir nesneler içeriyorsa (listeler veya sözlükler gibi), yüzeysel bir kopya yalnızca dış kapsayıcıyı kopyalayacaktır; iç içe geçmiş nesneler paylaşılmış olarak kalır. Kopyadaki iç içe geçmiş bir listeyi değiştirmek, orijinal listeyi değiştirecektir. Bunu önlemek için, hiyerarşi içindeki her nesneyi yinelemeli olarak klonlayan 'kopya' modülünün 'deepcopy()' işlevini kullanarak derin bir kopyalama gerçekleştirmelisiniz.
Kod ve Yürütme Çıkışı
Bu kod, referans atama tuzağını, list.copy() kullanarak yüzeysel kopyalamayı ve copy modülünü kullanarak iç içe geçmiş listelerin derin kopyalamasını gösterir.
import copy
# 1. The assignment reference trap (Not a copy!)
original = [1, 2, 3]
reference = original
reference.append(99)
print("Reference modification affects original:", original)
# Reset list
original = [1, 2, 3]
# 2. Creating a shallow copy (using list.copy())
shallow_copy = original.copy()
shallow_copy.append(100)
print("\nOriginal:", original)
print("Shallow copy:", shallow_copy)
# 3. The nested list limitation of shallow copies
nested = [[1, 2], [3, 4]]
shallow_nested = nested.copy()
shallow_nested[0].append(99) # Modifying nested list
print("\nOriginal nested:", nested)
print("Shallow nested copy:", shallow_nested)
# 4. Creating a deep copy
nested_original = [[1, 2], [3, 4]]
deep_copy = copy.deepcopy(nested_original)
deep_copy[0].append(99)
print("\nOriginal nested:", nested_original)
print("Deep copy (completely independent):", deep_copy)Reference modification affects original: [1, 2, 3, 99]
Original: [1, 2, 3]
Shallow copy: [1, 2, 3, 100]
Original nested: [[1, 2, 99], [3, 4]]
Shallow nested copy: [[1, 2, 99], [3, 4]]
Original nested: [[1, 2], [3, 4]]
Deep copy (completely independent): [[1, 2, 99], [3, 4]]Adım Adım Uygulama
- Düz liste yapılarının yüzeysel bir kopyasını oluşturmak için my_list.copy() veya my_list[:] kullanın.
- Bağımsız koleksiyonlara ihtiyaç duyduğunuzda copy_list = my_list gibi referans atamalarından kaçının.
- Kopya modülünü içe aktarın ve iç içe değiştirilebilir yapılar içeren listeler için copy.deepcopy(my_list) öğesini kullanın.
- Performansı ve bellek ayak izini optimize etmek için veri yapılarınızı anladığınızdan emin olun.
Sıkça Sorulan Sorular
Sığ kopya ile derin kopya arasındaki fark nedir?
Sığ bir kopya, en dıştaki kabı kopyalar, ancak iç içe geçmiş değiştirilebilir nesnelere referans verir. Derin kopya, tüm iç içe geçmiş kapsayıcıları ve nesneleri yinelemeli olarak kopyalayarak tamamen yalıtılmış veri yapılarıyla sonuçlanır.
Liste dilimleme (list[:]), list.copy() işleminden daha hızlı mıdır?
Her ikisi de optimize edilmiş C işlemlerini arka planda yürüttüğü için performans açısından hemen hemen aynıdırlar. Okunabilirlik açısından genellikle list.copy() işlevinin kullanılması tercih edilir.
İlgili Konular
Güçlü parantez sözdizimini kullanarak Python'da listeleri nasıl dilimleyeceğinizi öğrenin. Ana başlangıç, durdurma ve adım argümanları, negatif indeksleme ve geri alma listeleri.
Python'da Bir Listeden Yinelenenler Nasıl KaldırılırSırayı korurken veya yok sayarken Python'da bir listedeki kopyaları nasıl kaldıracağınızı öğrenin. Ayarlanmış dönüşümleri, dikte anahtarlarını ve döngü yöntemlerini karşılaştırın.
Önerilen Python Kaynakları
İlgili etkileşimli eğitimler, yardımcı sayfalar ve kod karşılaştırmalarıyla bilginizi genişletin.
Python Değişkenleri ve Veri Türlerinin Açıklaması
Python değişkenlerini ve temel veri türlerini (dizeler, tamsayılar, kayan noktalar, boolean'lar) anlayın. Python'da hafıza atamaya yönelik eksiksiz bir başlangıç kılavuzu.
Python Liste Yöntemleri Hile Sayfası
Python liste işlemleri için hızlı başvuru kılavuzu. Öğeleri ekleme, ekleme, çıkarma, sıralama ve dilimleme konusunda uzmanlaşın.
Python vs JavaScript: Hangi Programlama Dili En İyisidir?
Python ve JavaScript arasında kapsamlı bir karşılaştırma. Sözdizimi farklılıklarını, performansı, kullanım örneklerini (arka uç ve ön uç) ve kodlama örneklerini keşfedin.