{count, plural, one {Cursus} other {Cursussen}}
Python-lijsten zijn krachtige datastructuren om een verzameling items op te slaan. De methode om een lijst te kopiëren is belangrijk bij het verwerken van data, omdat je zo de originele lijst kunt behouden terwijl je bewerkingen uitvoert op de kopie. In deze tutorial leg ik de basis- en gevorderde technieken uit om lijsten te kopiëren, met praktische voorbeelden.
Voordat we de verschillende voorbeelden verkennen, raad ik je aan om DataCamp’s cursus Introduction to Python te volgen om de basis van Python te leren, waaronder de verschillende Python-datastructuren. De Python Cheat Sheet voor beginners is ook handig om verschillende functies en methoden op te zoeken.

"Python die een kopieerapparaat gebruikt." Afbeelding door Dall-E.
Snel antwoord: hoe kopieer je een lijst in Python
Het onderstaande voorbeeld laat zien hoe je een lijst in Python kopieert met de methode copy(). Let op: de originele lijst blijft ongewijzigd, ook al pas je de kopie aan. De code print [1, 2, 3].
# Define the original list
original_list = [1, 2, 3]
# Create a shallow copy of the original list
copied_list = original_list.copy()
# Modify the first element of the copied list
copied_list[0] = 99
print(original_list)
[1, 2, 3]
Meer technieken om een lijst in Python te kopiëren
Voordat we naar de verschillende technieken kijken om een lijst in Python te kopiëren, is het goed om te begrijpen waarom we de toekenningsoperator = niet gebruiken. We gebruiken = niet, omdat dit geen echte kopie van onze lijst maakt. De toekenningsoperator maakt alleen een verwijzing naar onze lijst.
In het volgende voorbeeld verwijzen original_list en reference_to_original_list na de toekenning naar dezelfde lijst.
# Create a list called original_list
original_list = [1, 2, 3]
# Create a new reference copied_list that points to the same list as original_list
reference_to_original_list = original_list
Hier zullen wijzigingen in de gedupliceerde lijst de originele lijst beïnvloeden en omgekeerd. Deze veranderingen treden op omdat de twee lijsten in hetzelfde geheugen zijn opgeslagen. Laten we nu kijken naar de verschillende manieren om onze lijst daadwerkelijk te kopiëren.
De methode copy() gebruiken
De methode copy() is een ingebouwde methode om een shallow copy van de lijst te maken. De methode copy() is beschikbaar vanaf Python 3.3. Deze methode kopieert alleen de bovenste lijststructuur. De syntaxis van de methode copy() staat hieronder.
new_list = original_list.copy()
In het volgende voorbeeld print de code [1, 2, 3, 4].
# Original list with nested structure
original_list = [1, 2, 3, 4]
# Create a shallow copy using the copy() method
shallow_copied_list = original_list.copy()
print(shallow_copied_list)
[1, 2, 3, 4]
De list()-constructor gebruiken
De list()-constructor wordt gebruikt om een nieuwe lijst te maken op basis van een bestaande lijst, met alle elementen uit de originele lijst. Deze techniek is belangrijk wanneer je een nieuw lijstobject wilt creëren waarbij wijzigingen in de gekopieerde lijst de originele lijst niet beïnvloeden. De volgende code print [1, 2, 3].
# Create a list called original_list
original_list = [1, 2, 3]
# Create a shallow copy of original_list using the list() function
copied_list = list(original_list)
# Modify the first element of copied_list
copied_list[0] = 99
print(original_list)
[1, 2, 3]
List slicing met [:] gebruiken
List slicing [:] biedt een beknopte manier om een shallow copy van een lijst te maken. De list-slicingmethode [:] is efficiënt omdat deze op laag niveau in Python is geïmplementeerd. Hieronder staat de syntaxis van deze methode.
new_list = original_list[:]
De volgende code print [1, 2, 3].
# Create a list called original_list
original_list = [1, 2, 3]
# Create a shallow copy of original_list using list slicing
copied_list = original_list[:]
# Modify the first element of copied_list
copied_list[0] = 99
print(original_list)
[1, 2, 3]
In deze context gebruiken we de list-slicingmethode om alles in de lijst op te nemen, maar in andere contexten kun je met slicing sublijsten maken door begin- en eindindices op te geven.
Shallow copy vs. deep copy in Python
Het is belangrijk om het verschil tussen shallow en deep copy te begrijpen om onbedoelde dataverandering te voorkomen.
- Een shallow copy kopieert alleen de elementen op het hoogste niveau van de lijst en heeft geen effect op de geneste lijsten of muteerbare objecten binnen de lijst die naar dezelfde objecten verwijzen. De wijzigingen in de muteerbare objecten beïnvloeden zowel de originele als de gekopieerde lijst.
- Deep copy kopieert alle elementen recursief, inclusief geneste lijsten en muteerbare objecten, en maakt onafhankelijke kopieën. Wijzigingen in de geneste objecten in de gekopieerde lijst hebben geen invloed op de originele lijst.
Ik raad aan om de functie copy.copy() te gebruiken voor shallow copy en de functie copy.deepcopy() voor deep copy.
|
Methode |
Shallow copy |
Deep copy |
|
copy() |
✓ |
✗ |
|
list()-constructor |
✓ |
✗ |
|
List slicing [:] |
✓ |
✗ |
|
copy.copy() |
✓ |
✗ |
|
copy.deepcopy() |
✗ |
✓ |
Hoe kopieer je een geneste lijst in Python
Bij het werken met geneste lijsten of complexe datastructuren heb je geavanceerdere kopieermethoden nodig. Laten we kijken naar de verschillende technieken voor geneste lijsten.
copy.copy() gebruiken
De module copy biedt de functie copy(), die een shallow copy van een lijst maakt. De functie copy() is explicieter dan de list()-constructor of list slicing [:]. Je kunt deze methode gebruiken wanneer je wilt benadrukken dat je een shallow copy maakt om de leesbaarheid te verbeteren.
Het onderstaande voorbeeld laat zien hoe je een geneste lijst shallow kopieert. De code print [1, 2, [99, 4]] omdat de geneste lijst nog steeds hetzelfde object is.
# Import the copy module to access the copy.copy() function
import copy
# Original list with nested structure
original_list = [1, 2, [3, 4]]
# Create a shallow copy using copy.copy()
shallow_copied_list = copy.copy(original_list)
# Modifying the nested list in the copied list
shallow_copied_list[2][0] = 99
print(original_list)
[1, 2, [99, 4]]
copy.deepcopy() gebruiken
De functie deepcopy() is ook beschikbaar in de module copy. Deze functie maakt een deep copy van de lijst: zowel de lijst zelf als alle geneste objecten worden gedupliceerd. De functie deepcopy() is belangrijk wanneer je met muteerbare objecten binnen lijsten werkt, omdat dit ervoor zorgt dat wijzigingen in de gekopieerde lijsten de originele lijst niet beïnvloeden.
De onderstaande code print [1, 2, [3, 4]].
# Import the copy module to access the copy.deepcopy() function
import copy
# Original list with nested structure
original_list = [1, 2, [3, 4]]
# Create a deep copy using copy.deepcopy()
deep_copied_list = copy.deepcopy(original_list)
# Modifying the nested list in the copied list
deep_copied_list[2][0] = 99
print(original_list)
[1, 2, [3, 4]]
Conclusie
Begrijpen hoe je lijsten kopieert in Python is belangrijk voor efficiënte datamanipulatie. In deze tutorial hebben we verschillende methoden behandeld om een lijst in Python te kopiëren en de verschillen tussen shallow en deep copy besproken. Als data-analist is het belangrijk om op basis van je specifieke eisen de juiste kopieertechniek te kiezen. Ik raad je aan om de besproken methoden te oefenen om hun use-cases beter te begrijpen.
Volg DataCamp’s Python Programming skill track om je programmeervaardigheden te verbeteren met de beste technieken. Bekijk ook onze carrièrepaden Python Developer en Data Analyst with Python om praktische, baanrelevante skills te blijven opbouwen.
Veelgestelde vragen
Wat is het verschil tussen shallow copy en deep copy?
De shallow-copy-methode maakt een nieuwe lijst met dezelfde verwijzingen als de originele lijst, waardoor wijzigingen in de objecten in de gekopieerde lijst de originele lijst beïnvloeden. De deep copy maakt een nieuwe lijst en voegt de waarden uit de originele lijst recursief in, zodat wijzigingen aan geneste objecten in de gekopieerde lijst geen effect hebben op de originele lijst.
Wat zijn de methoden om een shallow copy te maken in Python?
Je kunt een shallow copy van een lijst maken met de methode copy(), list slicing [:], de list()-constructor of de functie copy() uit de module copy.
Hoe maak je een deep copy van een lijst in Python?
Je kunt een deep copy van een lijst maken met de functie deepcopy() uit de module copy.

