Du tror .copy() kopierer alt innholdet

Handler om: Liste, Mange objekter i en liste

`b = a.copy()` lager en ny ytre liste, men elementene inni er de samme objektene. Er lista nøstet, deler kopiene fortsatt de indre listene: endrer du `b[0][0]`, endrer du også `a[0][0]`. Kopien er grunn — bare ett lag dypt.

Eksempel

Du kopierer et rutenett, endrer én rute i kopien, og oppdager at originalen endret seg også.

Slik tenker du riktig om det

En grunn kopi er som å skrive av en handleliste der det står «se lappen på kjøleskapet». Du har din egen lapp, men peker på samme kjøleskap.

Slik ser det ut i kode

Slik gikk det galt

rutenett = [[0, 0], [0, 0]]
kopi = rutenett.copy()
kopi[0][0] = 9        # endrer også rutenett[0][0]

Slik fikser du det

import copy
kopi = copy.deepcopy(rutenett)   # nytt hele veien ned

Les om dette i boka

↓↑ naviger Enter åpne ShiftEnter ny fane Esc lukk
Velg tema
Skala