Kopiere dictionaries

I artikkelen om å kopiere lister ser vi at når vi tilordner ei liste til en annen variabel, blir det ikke utført noen kopiering av innholdet, den andre variabelen blir bare et nytt navn på den samme lista. Det samme er tilfelle med dictionaries.

For å illustrere bruker vi koden fra eksempel 1 i artikkelen om å kombinere dictionaries med dictionaries og lister:

agentbil = {
    "eier": "James Bond",
    "merke": "Aston Martin",
    "motordata": {"effekt": 125, "slagvolum": 2.1, "dreiemoment": 225},
    "dekkdata": {"bredde": 155, "profil": 70, "felg": 12}
}

Så skriver vi

nybil = agentbil

Da blir nybil en referanse til samme dictionary som agentbil, som vi kan se i Python Tutor:

Illustrasjon av flere referanser til samme dictionary

På samme måte som lister, har også dictionaries en copy()-metode, som genererer en ny dictionary. Hvis vi skriver

nybil = agentbil.copy()

blir nybil en ny dictionary, som vi kan se i Python Tutor:

Illustrasjon av grunn kopi av dictionary

Vi ser imidlertid at dictionaries med nøkler "motordata" og "dekkdata" inni agentbil ikke er blitt kopiert, det er bare gjort en grunn kopiering. Vil vi gjøre en dyp kopiering, kan vi bruke funksjonen deepcopy() fra modulen copy, på samme måte som med lister, slik det beskrives i artikkelen om grunn og dyp kopiering. Skriver vi

from copy import deepcopy
 
nybil = deepcopy(agentbil)

blir også dictionaries inni agentbil kopiert, som vi kan se i Python Tutor:

Illustrasjon av dyp kopi av dictionary

Kilder

    • Sweigart A. (2021). Beyond the basic stuff with Python. no starch press