Daugiau
Kaip klonuoti arba kopijuoti sąrašą?
Kokios yra sąrašo klonavimo arba kopijavimo "Python" programoje galimybės?
Naudojant naujas_sąrašas = mano_sąrašas
, bet kokie naujo_sąrašo
pakeitimai kaskart keičia mano_sąrašą
.
Kodėl taip yra?
2262
3
Naudodami
new_list = my_list
iš tikrųjų neturite dviejų sąrašų. Priskyrimas tik nukopijuoja nuorodą į sąrašą, o ne tikrąjį sąrašą, todėl po priskyrimo irnew_list
, irmy_list
nurodo į tą patį sąrašą.Norint iš tikrųjų nukopijuoti sąrašą, yra įvairių galimybių:
Galite naudoti integruotą
list.copy()
metodą (nuo Python 3.3):Galite jį supjaustyti:
Alex Martelli's nuomonė (bent jau [dar 2007 m.][2]) apie tai yra tokia, kad tai keista sintaksė ir nėra prasmės jos naudoti. ;) (Jo nuomone, kita yra labiau skaitoma).
Galite naudoti integruotą
list()
funkciją:Galite naudoti bendrąją funkciją `
copy.copy()
:Tai šiek tiek lėčiau nei
list()
, nes pirmiausia reikia išsiaiškintisenojo sąrašo
duomenų tipą.Jei sąraše yra objektų ir norite juos taip pat nukopijuoti, naudokite bendrąjį
copy.deepcopy()
:Akivaizdu, kad tai lėčiausias ir daugiausiai atminties reikalaujantis metodas, tačiau kartais neišvengiamas.
Pavyzdys:
Rezultatas:
Naudokite
thing[:]
Python' idioma tai daryti yra
newList = oldList[:]