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

Doamnelor, unde v-au dispărut bărbații?
Doamnelor, unde v-au dispărut bărbații?

Sunt gânduri care pot schimba destine. Sunt gânduri care pot ajuta o persoană deznădăjduită să-și ridice privirea din pământ. Sunt gânduri care ne pot confirma că iubirea ne caută mereu cu o forță care ne face să renunțăm la orgolii … Citeşte mai mult

Nu a fost votat Citește mai mult
Short Stories for Children (Povestiri pentru copii) - Anthology (Antologie)
Short Stories for Children (Povestiri pentru copii) – Anthology (Antologie)

Bilingual English/Romanian Book (Carte bilingvă engleză/română) Translator (Traducător): Nicolae Sfetcu A collection of short stories for children selected from the most beautiful stories written by famous authors from around the world. (O colecție de scurte povestiri pentru copii selectate dintre … Citeşte mai mult

Nu a fost votat 23.78 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Conspirație la Casa Albă
Conspirație la Casa Albă

Trezirea e ca o reîntoarcere din altă lume, ciudată, halucinantă, asemănătoare cu realitatea, cu legi similare celor din universul fizic, dar cu percepții deosebite și cu limite care își modifică forma; de aceea când, în dimineața de iarnă, încă întunecată, … Citeşte mai mult

Nu a fost votat 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 *