Assignment vs. Shallow Copy vs. Deep Copy in Python

Shallow Copy

en grunt kopia konstruerar ett nytt sammansatt objekt och infogar sedan (i möjligaste mån) referenser till de objekt som finns i originalet.

Vi har tre olika sätt att skapa en grund kopia:

här innehåller alla ovanstående listor samma värden som den ursprungliga listan:

>>> print(nums == m1 == m2 == m3)
True

men minnesadressen för varje är annorlunda.,

den här gången har varje lists objekt sin egen, oberoende minnesadress.

nu flyttar vi till den mer intressanta delen. Om den ursprungliga listan är ett sammansatt objekt (t.ex. en lista med listor), sedan efter en grund kopia, nya listelement fortfarande referera till de ursprungliga elementen.

så, om du ändrar de muterbara elementen som listor, kommer ändringarna att återspeglas på de ursprungliga elementen., Låt oss titta på exemplet nedan för att få en bättre förståelse:

som du ser i exemplet ovan, medan vi ändrar de interna listelementen i den nya listan, uppdateras den också i den ursprungliga listan, eftersom a och b pekar fortfarande på samma minnesadress (originallista).

den nya listan b har sin egen minnesadress men dess element gör det inte., Detta beror på att i grunt kopia, istället för att kopiera listans element till det nya objektet, kopierar det helt enkelt referenserna till deras minnesadresser.

därför, medan vi gör ändringar i det ursprungliga objektet, återspeglas det i de kopierade objekten och vice versa.

detta är en egenskap hos en grund kopia.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

Hoppa till verktygsfältet