Home » Articole » Articole » Calculatoare » Programare » Python » Matrice de copiere – și ne copiere în Python

Matrice de copiere – și ne copiere în Python

postat în: Python 0

Acum, o surpriză pentru cei neatenți. Să presupunem că scriu acest cod:

stooges = np.array(['Larry','Beavis','Moe'])
funny_people = stooges
stooges[1] = 'Curly'
print("The stooges are: {}.".format(stooges))
print("The funny people are: {}.".format(funny_people))

Gândiți un moment și preziceți care credeți că va fi rezultatul. Apoi, citiți-l și (eventual) plângeți:

▌ The stooges are: ['Larry' 'Curly' 'Moe'].
▌ The funny people are: ['Larry' 'Curly' 'Moe'].

Atenție: fără Beavis.

Acum întrebarea este de ce. Pentru a înțelege acest lucru (și practic orice altă problemă dificilă de programare) trebuie să reveniți încă o dată la imaginea memoriei. Figura 9.1 prezintă situația imediat înainte și după executarea liniei „stooges[1] = ‘Curly’”. Crucial este faptul că există o singură matrice în memorie. Ambele variabile – stooges și funny_people – indică spre ea

Cod Python

Figura 9.1: Codul anterior imediat înainte (partea stângă) și după (partea dreaptă) atingerea liniei „stooges[1] = ‘Curly’”.

Vedeți, dacă y conține date agregate (în loc de date atomice), linia „x = y” nu efectuează o operațiune de copiere. În schimb, indică doar numele variabilei x către același loc spre care indică y.

Odată ce înțelegi acest lucru, este ușor de înțeles de ce „Beavis” a dispărut complet. Există o singură matrice, așa că schimbarea numelui „stooges” are efectul secundar de a schimba implicit și numele „funny_people”.

Copierea efectivă

Comportamentul „îndrumă variabila către același lucru, dar nu face o copie” este implicit, deoarece astfel de operațiuni de copiere sunt costisitoare (în ceea ce privește utilizarea memoriei și timpul de execuție). În mod normal, nu sunt ceea ce dorești oricum. Uneori, însă, vrei să produci o copie completă și separată a unei matrice, astfel încât să poți modifica copia, păstrând în același timp originalul. Pentru a face acest lucru, utilizați metoda .copy():

orig_beatles = np.array(['John', 'Paul', 'George', 'Pete'])
beatles = orig_beatles.copy()
beatles[3] = 'Ringo'
print("The Beatles were originally {}.".format(orig_beatles))
print("But the ones we all know were {}.".format(beatles))

Priviți cu atenție a doua linie: face toată diferența. În loc să facem ca noua variabilă beatles să indice către aceeași matrice din memorie ca orig_beatles, am copiat explicit matricea și am făcut ca beatles să indice către acea nouă copie. Imaginea finală a memoriei este așadar ca în Figura 9.2, iar rezultatul este, desigur:

▌ The Beatles were originally ['John' 'Paul' 'George' 'Pete'].
▌ But the ones we all know were ['John' 'Paul' 'George' 'Ringo'].

Cod Python

Figura 9.2: Imaginea de memorie după apelarea metodei .copy(), în loc de simpla atribuire unei variabile noi.

Sursa: Stephen Davies, The Crystal Ball – Instruction Manual, Vol. 1: Introduction to Data Science, v. 1.1. Copyright © 2021 Stephen Davies. Licența CC BY-SA 4.0. Traducere și adaptare: Nicolae Sfetcu. © 2025 MultiMedia Publishing, Introducere în Știința Datelor, Volumul 1

Înțeles, sens și referință în filosofia limbajului și logica filosofică
Înțeles, sens și referință în filosofia limbajului și logica filosofică

Descoperă complexitatea gândirii și explorarea limbajului într-o manieră profundă și captivantă.

Nu a fost votat Interval de prețuri: 13.74 lei până la 50.49 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Corupţie - Globalizare - Neocolonialism
Corupţie – Globalizare – Neocolonialism

O carte esențială pentru toți cei interesați de realitățile sociale, economice și politice ale lumii moderne.

Nu a fost votat 0.00 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Fizica simplificată
Fizica simplificată

Transformă-ți curiozitatea în cunoaștere! Explorează tainele universului!

Nu a fost votat 13.74 lei Citește mai mult


Descoperă mai multe la MultiMedia

Abonează-te ca să primești ultimele articole prin email.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *