DavidErikMollberg/kennsluromur huggingface dataset:
Í þessum fyrirlestri eða þessu myndbandi ætla ég að fjalla um efni úr kafla þrjú í kennslubókinni sem heitir Algorithms and program program development Það er að segja algrím og þróun forrita
Og athugið það sem sagt algrími er íslenska orðið yfir algorithm Við getum sagt að þetta sé mengi af reglum
sem við eigum að fylgja eða ferli í útreikningi eða á einhverju þegar við erum að reyna að leysa eitthvað tiltekið vandamál
Eða með öðrum orðum við getum sagt að þetta sé einhvers konar uppskrift að því að leysa eitthvað tiltekið vandamál
Dæmi um það er hér hér er er verið að leysa hér er vandamál um það að finna kvaðratrót af einhverri tölu
Þá er hér einhvers konar uppskrift af því hvað þarf að gera Númer eitt þarf að geta upp á kvaðratrótinni gera síðan einhverja deilingu ég ætla ekkert að fara nákvæmlega í hvað er gert hérna
kvaðratrót af einhverri tiltekinni tölu
En forrit hins vegar það er útfærsla á algríminu okkar í einhverju tilteknu forritunarmáli og sem keyrir síðan á einhverri tölvu
Og það sem er kannski líka mikilvægt er að átta sig á hér að við getum útfært tiltekið algrím í mismunandi forritunarmálum Í þessu námskeiði sem við erum hér í þá erum við að nota forritunarmálið Python sem okkar
útfærslumál en við gætum verið að að útfæra algrímin okkar í einhverju allt öðru forritunarmálum líka
við getum sagt það að algrímið sé óháð útfærslunni Það er dálítið mikilvægt að átta sig á þessu Þegar við búum til algrím sem er lýsing eða uppskrift að einhverju tilteknu vandamáli
þá er sú lýsing óháð útfærslunni við erum jafnvel ekkert að hugsa um útfærsluna þegar við skrifum algrímið
hvernig hversu auðvelt eða hversu erfitt það er fyrir okkur að nota eitthvað tiltekið forritunarmál til þess að útfæra algrímið
nemendur sem eru að læra forritun í fyrsta sinn að nota það tiltekna forritunarmál til þess að útfæra algrím
geta keyrt okkar útfærslur af algrímum
algrím þurfi til dæmis að vera nákvæmt eða detailed
það algrími innihaldi nægilegar upplýsingar fyrir okkur eða fyrir þann sem að útfærir það
Við getum líka sagt að að algrími þurfi að vera skilvirkt Hvað er átt við með því
eða hætti í
á einhverjum
En þetta reasonable amount of time getur verið mismunandi eftir því í hvaða forritun í hvaða keyrsluumhverfi við erum Við getum verið á tölvum sem eru mjög hraðvirkar við getum verið á tölvum sem eru mjög hægvirkar og svo framvegis
En það gildir í sjálfu sér einu við verðum að geta fengið svar til baka í tíma sem að er ekki allt of langur
Til dæmis viljum ekki bíða í marga mánuði eftir svari helst ekki
Nú síðan þarf algrím að vera með einhverja tilgreinda hegðun það er að segja
við þurfum að geta sagt hvert er inntakið inn í algrími og hvert er úttakið
Oft viljum við að algrím sé með almennan tilgang
Það er að segja að við búum til algrím sem að virkar fyrir ýmiss konar tegundir af gögnum
og svona gott dæmi um það til dæmis er röðunar algrím sem að þið eigið eftir að skoða kynnast seinna
Þegar ef að við skrifum algrím sem á að
geta raðað einhverjum gögnum þá myndum við helst vilja að að þetta algrím hefði almennan tilgang
sem þýðir þá að það geti raðað tölum það geti raðað hérna stöfum það geti raðað heilsuskýrslum og svo framvegis
Nú það er sem sagt ýmislegt sem við þurfum að hafa í huga hérna sem forritarar
Þetta það að forrita
þetta ferli sem sagt að koma raunverulega vanda brjóta vandamál niður sem sagt að búa til algrím fyrir mann sem leysir vandamálið og koma því svo yfir í kóða sem sagt ogaðfæ gera útfærsluna
Er eitthvað sem að kemur náttúrulega með æfingunni eins og svo margt annað Með því að æfa sig þá verður maður smám saman betri í þessu
Nú við höfum aðeins talað um læsileika
en hérna við kannski aðeins í meira eða nákvæmara í það hvað við eigum við
Og það er mikið búið að tala um það að forrit er ekkert annað heldur en einhvers konar ritgerð um lausn vandamáls sem vill svo til að að og það vill svo til að ritgerðin verður lesin af öðrum
eða jafnvel okkur sjálfum Og vegna þess að það ef við lítum á þetta sem ritgerð þá er náttúrulega mikilvægt að ritgerðin okkar sé læ læsileg
og þá skiptir máli hvernig við skrifuðum hana Þannig að það er mikilvægt að við skrifum forrit þannig að við getum lesið það
eða einhverjir aðrir vegna þess að það er mjög líklegt að það verði einm einmitt við sem að munum koma til með að lesa þetta forrit seinna meir og bæta við það og breyta Þannig við getum kom
Þannig við getum kom viljað koma að því seinna meir
í í
Nú hvað ge er það sem getur hjálpað okkur með því að gera forrit læsilegt Eitt það helsta
er það að vera með góð nöfn á hlutum
nota nöfn sem eru lýsandi fyrir tilgang þeirra og þérna þegar við erum að tala um nöfn þá erum við til dæmis að tala um breytunöfn
Það er einnig hægt að gefa lesanda til kynna hvaða tög er verið að nota með því að láta tögin vera hluta af breytunöfnunum
Við hérna sjáum aðeins dæmi um þetta hérna á eftir og og Python það er svona algengt í Python að nota þessa reglu sem heitir lower with under Það er að segja breytunöfnin séu með lowercase
lágstöfum með underscore á
milli breytunafnsins og tagsins
Sjáum hérna dæmi um þetta hér
Ef við skoðum þetta codelisting hérna þá sjáum við dæmi einmitt um fyrsta lagi dæmi um eitthvað sem er
ekki læsilegur kóði sem er hérna að ofan og svo það sem er læsilegur kóði sem hérna að neðan
Skoðum fyrst þetta hérna ofan þegar við horfum á lesum þetta hérna forrit þá sjáum við í fyrsta lagi að það eru breytunöfn sem heita a b og c
C plús b lagt saman og niðurstaðan fer í c b hækkað um einn
Ef við horfum á þetta hérna fyrir neðan þá í fyrsta lagi er búið að setja hérna athugasemd eða komment hérna uppi Calculate the average of a sum of consecutive integers in a given range
sem segir okkur einmitt hver er tilgangur kóðans í heild sinni Og þetta er mjög gott að hafa svona eina setningu í upphafi sem lýsir því hver hvað á að gera í þessu tiltekna forriti
Svo sjáum við hér að í staðinn fyrir að
vera hérna með strenginn give a number þá kemur hérna range is from one to your input það er strax betri strengur meira lýsandi
Nú síðan í næstu setningu þá er verið að breyta limit streng yfir í int og þá fáum við breytuna limit int Og svo er einhver breyta sem heitir count int hérna count greinilega fyrir einhvern fjölda
While lykkjan hún verður strax líka mikið læsilegri á meðan að count er minni en limit
les reikna
summu samliggjandi talna vegna þess að count int byrjar í einum og svo er count int alltaf að hækka hérna í while lykkjunni þangað til að það er orðið stærri en limit int
Mjög lýsandi hún er greinilega meðaltal og það er underscore float og float stendur fyrir rauntölu
Þannig að það er himinn og haf á milli þessa kóða hér fyrir neðan og kóðans hérna fyrir ofan Þeir gera það sama
það er nánast útilokað þegar maður horfir á þennan kóða hérna fyrir ofan að skilja hvað hann er að gera
Nema eyða mjög miklum tíma í það að að koma sér inn kóðann meðan það að horfa á þennan kóða hérna fyrir neðan það tekur maður bara nokkrar sekúndur að átta sig á því hvað er í gangi þar
Ókei hvað getum við þá sagt um komment Jú gott að vera með einhvers konar upplýsingar eða athugasemd í upphafi forritsins sem að lýsir því hver er tilgangur kóðans
Það er ekki
það er ekki ástæða til að lýsa tilgangi breytna ef að það er augljóst frá nafninu þannig að almennt getum við sagt
Ef að nafnið er lýsandi þá er ekki ástæða til þess að lýsa yfir einhverju tilteknum
Tilgangi fallna getur falla getur verið gott að lýsa Við erum ekki byrjuð að tala um föll þannig að við tölum um þetta seinna
og hér er mikilvægur punktur
Ef að eitthvað er erfitt eða eitthvað sem eitthvað sem tók okkur langan tíma að skrifa
þá er líklegt að það sé líka erfitt að lesa þann kóða og þess vegna er mikilvægt að að setja komment á hann
Eitthvað sem að vefst fyrir okkur og er ekki auðvelt fyrir okkur að skrifa þá getur það verið vegna þess að það er bara flókið og þar með verður það líka flókið að lesa fyrir einhvern Þá er gott að setja komment á það
Þannig að þá erum við komin að einmitt þessari reglu sex hjá höfunda bókarinnar
If it was hard to write it is probably hard to read Add a comment
Hérna eru svona dæmi um svona komment sem eru óþarfi jafnvel bara slæm
Input value sjáið þið hér limit streng er sama sem input og svo kemur einhver strengur hér
Það er augljóst úr þessari setningu að við erum að nota með þessu input fallið hérna hver tilgangurinn er Það þarf ekkert að gefa komment á það
assign one to the counting variable
Hérna stendur count int er sama sem einn
þetta komment assign one to the counting variable bætir engu við læsileikann
miðað við þessa setningu hér count int sama sem einn
Breytunafnið er count sem segir okkur mikið að þetta sé einhvers konar teljari Underscore int segir okkur að þetta sé integer tag og sama sem einn
Setningin sjálf segir allt sem segja þarf
Oft er talað um það að
the comment is in the code
hver tilgangurinn er Þannig það þarf ekki að setja komment á það the comment is in the code
Sum int sama sem núll sama hér Það þarf ekkert að segja assign zero to the sum
Hér er komment while loop runs while the c while loop runs while the counting variable is smaller than the input value
Það þarf ekkert að segja það það er augljóst frá while lykkjunni sjálfri ef maður skoðar hana While count int er minna eða sama sem limit int
hvenær þessi while lykkja hættir
Þannig að stundum er ágætt að hafa þetta í huga
The comment is in the code
þegar um augljósla augljósa hluti er að ræða
Inndráttur þarna er verið að benda á það að
við getum við þurfum reyndar oft í Python að draga inn kóða Til dæmis þegar kóði er hluti af lykkju
þá verðum við að draga inn kóðann
Annað sem mætti nefna hérna er
að það getur verið gott að bæta við tómum línum auðum línum inn í kóða til þess að hafa kó í stað þess að hafa kóða algjörlega í belg og biðu Þá getur verið gott að draga setja auðar línur inn á milli þannig að bara alveg eins og þið hugsið þegar þið lesið bók
Að já forritun er einmitt essay er það ekki ritgerð
Þegar við lesum bók þá er mjög erfitt fyrir okkur að lesa texta sem er mjög samþjappaður Það er gott fyrir okkur að gott fyrir okkur þegar höfundur brýtur texta upp í
tölur eins og einn tveir þrír en notandi slær inn stafi eins og stafinn a
sem sagt crasha eins og sagt er Það þarf að gera ráð fyrir þessu og koma þá einhverja millimeldingu til notandans og biðja hann um að slá inn aftur Þetta er það það sem er átt við með robust Nú correct nú það þýðir náttúrulega forritið þarf að vera rétt
það þarf að sem sagt skila inn réttri niðurstöðu og það er auðvitað oft erfiðara en en maður heldur að fá forrit til þess að gera nákvæmlega það sem maður vill að það geri Eins en eins og við töluðum um áðan þá er það auðvitað æfingin sem skapar meistarann í því
Nú aðeins meira um svona lausn vandamála
Munið sem sagt það að það það eru tveir hlutir sem við þurfum að hafa í huga þegar við erum að leysa vandamál Í fyrsta lagi að skilja vandamálið sem um ræðir
og geta raunverulega skrifað algrím sem að leysir það Ef við getum það þá skiljum við vandamálið
Þegar við skrifum algrími þá setjumst við niður bara kannski og skrifum það í texta Við erum alls ekki byrjuð að skrifa neitt forrit Þegar það er komið þá getum við útfært okkar lýsingu okkar algrím í einhverju tilteknu forritunarmáli og við notum einmitt Python í þessu námskeiði
forritunarmál Þannig að og það það er mjög mikilvægt fyrir ykkur að
setjast niður þegar að þið standið fyrir frammi fyrir einhverju tilteknu vandamáli reyna að skilja það
skrifa algrím sem leysir það áður en þið reynið að forrita lausnina
Nú við getum hérna talað um nokkur svona skref varðandi problem solving Fyrsta lagi það að vera svona ákveðin í því sem við erum að að gera Ekki gefast upp auðveldlega
prófa mismunandi hluti svona komast í rétta haminn Og
þegar við erum að sem sagt að hugsa um eitthvað tiltekið vandamál að vera þá
alveg algjörlega fókuseruð Ekki vera að hoppa yfir í í símann eða á samfélagsmiðla og þess háttar
Raunverulega einbeita okkur að því verkefni sem liggur fyrir
Það getur verið gott að að reyna að sjá fyrir sér einhverja mynd af vandamálinu
Til dæmis að að teikna upp einhverja mynd eða skrifa út einhverja teikna einhverjar töflur upp reyna svona sjá vandamálið fyrir okkur og en þetta getur verið mjög mismunandi milli manna þannig að þið þurfið einhvern veginn að finna hvaða leið hentar ykkur
þegar þið eruð að reyna að leysa vandamál
Og svo þarf maður að vera óhræddur við þessa að prófa
Það er ekkert að því að að eitthvað gangi ekki í fyrsta sinn
Menn geta prófað einhverja tiltekna lausn hún gengur ekki
Þetta er mjög mikilvægur punktur simplify eða einföldun
Þannig að við erum með kannski með stórt erfitt vandamál í höndunum en við brjótum þau niður í minni vandamál Ef okkur tekst að leysa vinn minni vandamálin þá að lokum munum við leysa stóra vandamálið
Þannig að eins og hér segir given a hard problem make it simpler einhv einhverju leyti minna eða eða auðveldara
og það mun hjálpa okkur til þess að leysa þetta stóra vandamál Ef okkur tekst að brjóta það niður í minni vandamál og leysa þau sér
lendum við bara í því að við erum komin í einhverjar ógöngur við erum förum einhverja leið sem að virkar ekki
og í stað þess að svona að að vera þrjósk og halda áfram við með eitthvað tiltekið van
tiltekna lausn þá geti verið að við þurfum hreinlega bara að byrja uppá nýtt og það er ekkert að því
Nú þessi punktur hérna er dálítið mikilvægur það er að segja bara slaka aðeins á taka tíma það að fá niðurstöðuna
það að fá ekki niðurstöðuna strax segi ég það er ekki heimsendir
Þá getum við þurft aðeins að bara leggja þetta frá okkur
hugsa um eitthvað annað jafnvel í bil í bili og koma svo seinna að vandamálinu
Og jafnvel það svona einfaldir hlutir eins og bara að standa upp fara fram fá sér kaffi
Það að jafnvel að labba og fá sér kaffi og og hérna labba til baka Á þeim tímapunkti geta ýmsir ýmsir hlutir gerst eins og það að það kviknaði eitthvað ljós Bara vegna þess að maður stóð upp og hugsaði á annan máta um vandamálið
Nú endum þetta hérna á þessum reglum sem að kennslubókin hefur talað um
Í fyrstu þarna þremur köflunum
það er í fyrsta lagi þetta að hugsa áður en við forritum Þetta tengist algrímunum setjumst niður þegar að einhver kemur með vandamál til okkar reynum að búa til algrím sem að leysir vandamálið Munið algrím er
einhvers konar leiðarvísir eða uppskrift að því hvernig við leysum vandamálið þannig að það er búið að tiltaka skref fyrir skref hvað við þurfum að gera til þess að leysa vandamálið
Þegar við erum komin með þetta algrím sem við erum jafnvel búin að skrifa upp bara í einhverju textaformi Þá tökum við það algrím og útfærum það í forriti í Python í okkar tilviki
Númer tvö forrit er ekkert annað en ritgerð og það vill svo til ritgerðin sem sagt lausn vandamáls
og það vill svo til að þetta þessi ritgerð hún keyrir á tölvu Hvað þýðir það Það þýðir það að forritið okkar verður að vera mjög læsilegt vegna þess að þetta er ritgerð sem er ætluð fyrir annað fólk að lesa líka
Númer þrjú
the best way to improve your programming and problem solving skills is to practice Já þetta er náttúrulega bara augljóst og þarf ekki að segja það
Númer fjögur a foolish consistency is the hobgoblin of little minds Hvað þýðir þetta Ja hérna er verið að ta vísa dálítið í kommentin að
það getur verið gott sko maður getur verið consistent í því að konn að gefa komment í forriti en það getur líka verið foolish Það er að segja það er ekki ástæða til þess að vera að kommentera kóða sem er alveg augljós
þá er talað um það sé bara foolish consistency
Númer fimm test your code often and thoroughly Prófið kóðann ykkar prófið forritin ykkar eins oft og þið getið og eins nákvæmlega eins og þið getið Þegar þið skrifið forrit í Visual Studio Code
hugsið þið um mismunandi prófunar tilvik þá ekki alltaf láta Mími prófa forritin fyrir ykkur Reynið að sjá fyrir ykkur fyrir fram hvers konar prófunartilvik geta komið upp
Og síðasti punkturinn hérna
það vefst fyrir ykkur hvernig á að leysa tiltekið vandamál eða tiltekinn hluta af vandamáli vegna og það er erfitt að skrifa það í forriti það er erfitt að forrita það þá er það mjög líklega líka erfitt að lesa Og í þeim tilvikum er ástæða til að setja komment á kóðann
Já góðan daginn komið þið sæl
Ég ætla í þessu myndbandi að fara yfir þrjú atriði sem að tengjast föllum
Og þar með gera föllin einmitt forritin okkar svo læsileg og þetta hefur líka með viðhald forrita að gera að geta að geta notað föll á svona skilvirkan máta og þa það eru þrjú atriði sem við ætlum að tala um í í tengslum við föll núna það eru gildissvið á breytum eða það sem á ensku heitir scope
Það er stikur færibreytna eða parameter parsing og það eru dock string sem eru ákveðin komment eða athugasemdir sem hægt er að tengja tengja við föll
Við skulum bara að vinda okkur strax í þetta byrjum á því sem heitir gildissvið
Tökum hérna dæmi
Ég ætla að skrifa hérna fat sem að ég kalla bara hérna func sem er auðvitað ekki gott nafn á falli vegna þess að það er ekki lýsandi og látum að taka inn hérna lista
Það sem þetta fall gerir er að það skilgreinir breytu sem heitir first sem er ef vísað í fyrsta stakið Í listanum og prenta svo út þessa first breytu
Ósköp einfalt fall
Ég þarf síðan að kalla á það við skulum láta aðal forritið byrja hér main program starts here
Og hvað gerir það Það kallar ja það býr sér til lista við skulum kalla það my list sem inniheldur einn tvo þrjá og það kallar síðan á func fallið með þessum lista
Þannig að listinn mælist sendur sem viðfang argument hérna inn í fallið func og þar er breyta sem hefur sk hefur nafnið first sem að fær gildi sitt úr fyrsta staki listans og prenta út first
Ósköp einfalt forrit sem að ég geri ráð fyrir að gangi bara og það kemur út einn hérna
Það sem við mátti búast það er fyrsta stakið í listanum my list er einn
Já og hver var tilgangurinn me tilgangurinn með þessu forriti
Hann var einfaldlega sá að að sýna að hér inni í fallinu func er verið að skilgreina breytu sem heitir first og spurningin er hvert gildissvið þessarar breytu
Hvert er sk hver er eins og á enskunni sagt what is the scope of the variable og ég sagði áðan að gildissvið breytu eru þær setningar sem breytan er lifandi í
Þannig að við gætum sagt hérna komment first is a local variable það er að segja first er það sem á íslensku heitir staðvær breyta
Hún ætti ekki að vera aðgengileg utan fallsins sagði ég ég get nú bara tékka á því strax hér með því að segja prenta reyni að prenta út first hér
Segjum að ég sjái það bara ekki og keyri þetta reyni að keyra þá fæ ég einmitt name error name first is not defined
Það er að segja að breytan first er ekki skilgreind sem að raunverulega þýðir það að það er engin breyta first í þessum setningum þessum setningum í aðalforritinu sem er aðgengileg
Það er til vissulega breyta hér í first í fall í fallinu func en hún er bara lifandi á meðan það fall keyrir
Um leið og my list er búið að fyrirgefið func er búið að keyra þá er þessi breyta í sjálfu sér ekki lifandi lengur gildissvið hennar er er er lokið og ég get ekki prentað út first hér að því að first er local variable
Kannski er ágætt að benda á það ef ég mundi segja að hér first er sama sem tíu sjáið þið þá kvartar Visual studio code ekki lengur og ég get gert þetta hérna og fær einn og tíu
Einn kemur héðan úr þessari print setningu og tíu kemur úr setningunni í aðalforritinu
En sjáið þið núna að first er núna aðgengileg í aðalforritinu vegna þess að ég hreinlega lýsi henni yfir hér ég gef first hérna gildi
Þannig að nú erum við komin með það að gildissvið first breytunni í aðalforritinu eru þessar tvær setningar en það er alls ekki saman breytan og er hér
En segjum að ég taki þetta út aftur hérna þá væri reyndar fróðlegt að vita hvað gerist ef að aðalforritið lýsir yfir einhverri breytu eins og some var gefur því gildi tíu og fallið func prentar það út
Er þetta hægt
Þetta er raunverulega öfuga leiðin við það sem ég gerði áðan
Áðan var ég með first í skilgreindi falli og reyndi að prenta first breytuna í aðalforritinu
Nú er ég með breytu sem heitir some var í aðalforritinu og reyni að prenta hana út í fallinu
Þið sjáið að Visual studio code kvartar ekki yfir þessu
Ég get þar með ef ég skilgreini breytu í aðalforriti haft aðgang að henni í öllum þeim föllum sem á eftir koma sem kallað er á eftir þetta
Hins vegar ef við sjáum hér í func í skilgreiningunni á func þá má eiginlega segja það hérna að some var is a global variable global eða víðvær breyta
Hún er ekki skilgreint hér inn í func en ég hef samt sem áður alg aðgang að henni vegna þess að hún er skilgreind í aðalforritinu
Og almennt má segja að þetta er ekki góð forritunarvenja að reiða sig á gildi á gl global breytum inn í föllum
En maður þarf á svona gildi að halda eins og some var þá er mikið eðlilegra að senda það gildi inn í fallið
Svona gæti ég gert tekið við því hér a var og prentað það hérna út
Þá er ég eiginlega ekki lengur að nota hérna einhverja global breytu heldur að nota gildi sem var sent inn hérna í fallið og gildissvið þessarar breytu er þá einmitt bara í þessum þremur setningum hérna
Raunverulega má segja að hérna að a var is a parama pa pa parameter þetta er þetta gildi á parameter sem hagar sér raunverulega eins og lókal breyta gildissvið þessa parameter er bara hér inni í þessum þremur setningum í fallinu
Hérna sjáið þið að ég fæ sö sama sömu niðurstöðu en þetta er mun betra en betri leið heldur en að reiða sig á gildi á einhverri global breytu vegna þess að gæti verið svo að þessari global breytu yrði einhvers staðar breytt í forritinu án þess að við án þess að og og fallið func hefði ekki endilega viljað fá þessa breytingu
En um leið og við vísum í some var hér inn í func þá eru allar breytingar sem að gerðar verða á some var munu geta haft áhrif á virknina inn í func
Nú tökum þá næsta atriði sem að var í tengslum við fallaköllin og og parameter parsing
Já parameter parsing frekar heldur en fallaköll
Sko förum aðeins til baka hérna eins og þetta var
Func a list var svona og skulum bara taka þetta hérna út
Prentum bara a list hérna tek func tekur bara lista prentar hann út og köllum á func hérna með þessum lista hérna my list og prentum líka my list hérna
Sko það og já við skulum kannski bara byrja á því að keyra þetta hérna
Þið sjáið það að my list hefur gildi einn tveir þrír og það prentast út einn tveir þrír í fallinu func og svo þegar við komum til baka og prentuðu prenta ég my list og það er líka einn tveir þrír og auðvitað kemur þetta ekki á óvart
En spurningin er hvað raunverulega er að gerast hér á bak við tjöldin
Það sem gerist þá er það að það verður til svokölluð tilvísun eða reference þannig að my list er raunverulega nú geri gera svona reference eða ör
My list er raunverulega tilvísun á hlut sem er listi
Það er raunverulega það sem gerist í þessari gildisveiti veitingasetningu
Þegar að my list er síðan sendur sem viðfang inn í func þá er því tekið við þessari tilvísun i breytunni a list
Þannig að við getum sagt sem svo að þegar þetta fallakall á sér stað þá er a list önnur breyta sem að vísar á nákvæmlega sama lista
Og þannig það er dálítið mikilvægt að gera sér grein fyrir því að listinn sjálfur hérna listinn einn tveir þrír hann er ekki afritaður
Hann er ekki afr það er ekki búið til nýtt afrit af listanum einn tveir þrír og hann sendur hingað heldur er raunverulega búið til afrit af tilvísunni sjálfri
Þannig að við eigum tvær tilvísanir my list bendir á listann einn tveir þrír og a list bendir á þann sama lista
Hvað gerist ef við segjum hér a list punktur append fjórir
Það er að segja listinn sem að a list vísar á ég ætla að bæta fjórum við hann
Keyrum þetta nú þegar ég prenta út a list hér þá fæ ég einmitt listann einn tveir þrír fjórir vegna þess að ég bætti við fjórum
Jú það er einfaldlega vegna þess að þegar ég notaði append til að setja fjórir aftast í listann þá raunverulega gerði ég svona bætti fjórum við þann lista sem að a list vísar á
Þannig að að þetta er ástæðan fyrir því að þegar ég prenta út my list í aðalforritinu þá fæ ég sama hlut
Hvað gerist núna
Þá prenta ég a list hann er fjórum fimm sex en my list er einn tveir þrír
Hver er ástæðan fyrir þessu
Þannig að nú er a list ekki að benda á einn tvo þrjá lengur svona var þetta heldur er ég raunverulega kominn með þetta svona
A list bendir núna á nýjan lista sem er fjórir fimm sex þannig að nú er ég með tvær tilvísanir sem benda á mismunandi hluti
My list bendir á einn tvo þrjá listann einn tvo þrjá en a list bendir á fjórum fimm sex